Unexpected/Unwanted 导致 Python 中的正弦波计算
Unexpected/Unwanted results in sine wave calculation in Python
作为一个更大项目的一部分,我想更改波长型模式中的一些值,而不是 +1 线性型模式。
明确地说,我不想尝试将这些绘制在图表或任何类似的东西上......我想使用这些值通过我的 Raspberry Pi 来控制一些颜色强度。
总之,回到手头的问题...
我有以下 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
为什么我会得到这些奇怪的结果?我如何避免这些出路值?我做错了什么?
这些值不是 "way-out-there," 它们与零到机器精度一致。 Python 通常精度为 53 位:
https://docs.python.org/2/tutorial/floatingpoint.html
它的二进制表示对应于 ~1e-16,这是您在正弦函数中应与零对应的值中看到的顺序。
作为一个更大项目的一部分,我想更改波长型模式中的一些值,而不是 +1 线性型模式。
明确地说,我不想尝试将这些绘制在图表或任何类似的东西上......我想使用这些值通过我的 Raspberry Pi 来控制一些颜色强度。
总之,回到手头的问题...
我有以下 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
为什么我会得到这些奇怪的结果?我如何避免这些出路值?我做错了什么?
这些值不是 "way-out-there," 它们与零到机器精度一致。 Python 通常精度为 53 位:
https://docs.python.org/2/tutorial/floatingpoint.html
它的二进制表示对应于 ~1e-16,这是您在正弦函数中应与零对应的值中看到的顺序。