0
大きなプロジェクトの一部として、+1の線形パターンではなく、波長タイプのパターンでいくつかの値を変更したい。Pythonの正弦波計算における予期しない/望ましくない結果
明らかに、これらの値をグラフやその他のものにプロットしようとは思わない...これらの値を使用して、私のラズベリーパイを介して色の濃さを調整したい。
とにかく、手の甲で問題に...
私は次のPythonスクリプトがあります。
#!/usr/bin/python
from math import *
Fs=8000
f=500
i=0
while i<50:
print (sin(2*pi*f*i/Fs))
i+=1
私に次のような出力(切り捨て)が得られる:
0.0
0.382683432365
0.707106781187
0.923879532511
1.0
0.923879532511
0.707106781187
0.382683432365
1.22464679915e-16
-0.382683432365
-0.707106781187
-0.923879532511
-1.0
-0.923879532511
-0.707106781187
-0.382683432365
-2.44929359829e-16
0.382683432365
0.707106781187
0.923879532511
1.0
をご覧のように、何度でも価値があります。
1.22464679915e-16
-2.44929359829e-16
3.67394039744e-16
-4.89858719659e-16
2.38868023897e-15
-7.34788079488e-16
なぜこれらの奇妙な結果が得られますか?どのように私はこれらの出口価値を回避するのですか?私は間違って何をしていますか?
おそらく "pi"定数は浮動小数点数です:https://en.wikipedia.org/wiki/Floating_point – Welbog
これらの値は「出て行く」ものではなく、ほぼ0.0に近い値です。それらが正確にゼロでない理由は[浮動小数点は常に正確ではありません](http://stackoverflow.com/questions/588004/is-floating-point-math-broken)です。 –
丸めノイズで最後のビットを切り捨てるには、範囲(50)の 'for i:print(16 + sin(2 * pi * f * i/Fs))-16 'を使用します。 – LutzL