2017-10-16 124 views
0

我试图用数学模块创建极坐标数组;但math.sin(math.pi)总是给出错误的结果。 与Python 2.7或3.5相同的错误的结果:Sin pi:给出错误结果

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) 

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

+0

谢谢,我会检查 – seghier

回答

1

由于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。小数点后的五位数字对于您可能需要该模块的几乎任何东西都应该很好。

+0

谢谢你的信息,我会尝试它 – seghier