Sin pi : 给出错误的结果

Sin pi : give wrong result

我尝试用数学模块创建极坐标阵列;但是 math.sin(math.pi) 总是给出错误的结果。 使用 python 2.7 或 3.5 相同的错误结果:

import math
m = math.radians(180)
print (math.sin(m))
pi = math.pi
print (pi)
print (math.sin(pi))

1.2246467991473532e-16
3.141592653589793
1.2246467991473532e-16

这是我的代码和同样的错误:

import math

a = 180 #(degree)

r = 10
n = 8
b = float(a)/n

pi = math.radians(180)
print math.sin(pi)

for i in range(0,2*n+1):
   print i
   c1 = b*i
   print c1
   c2 = c1*math.pi/a #c : radians
   print c2
   sinb = math.sin(c2)
   cosb = math.cos(c2)
   x = r*sinb
   y = r*cosb
   #print (x, y)

评论中提到的线程给出了解释而不是解决方案;所以我不需要解释如何以及为什么没有解决我的问题的方法和科迪的答案给我解决方案。 如果您认为其他线程在这些线程中显示的答案是重复的。

由于 pi 是一个无理数并且永远持续下去,因此 Python 版本实际上并不是精确的 pi。结果,almost-pi的罪就是almost-0。基本上你可以把它归结为 Python 舍入错误。

以下是关于该主题的更多信息:

Floating Point Arithmetic: Issues and Limitations

why am I getting an error using math.sin(math.pi) in python?

我建议您四舍五入到最接近您的模块的 N 个单位。你得到的数值是0.000000000000000122。小数点后五位数字应该适用于您可能需要该模块的几乎所有内容。