2017-10-16 6 views
0

J'ai essayé de créer une matrice polaire avec un module mathématique; mais math.sin (math.pi) donne toujours un mauvais résultat. avec python 2.7 ou 3.5, le même résultat erroné:Sin pi: donner un mauvais résultat

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 

c'est mon code et la même erreur:

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) 

les fils mentionnés dans le commentaire donnent des explications pas Solution ; donc je n'ai pas besoin d'explication comment et pourquoi sans solution pour résoudre mon problème et la réponse de cody me donne la solution. si vous pensez que les autres threads montrent la réponse mentionnée dans ces threads qui sont en double.

+0

merci je vais vérifier que – seghier

Répondre

1

Puisque pi est un nombre irrationnel et continue indéfiniment, la version Python n'est pas réellement exacte pi. En conséquence, le péché de almost-pi est almost-0. Fondamentalement, vous pouvez craie jusqu'à une erreur d'arrondi Python.

est ici un peu plus d'informations sur le sujet en général:

Floating Point Arithmetic: Issues and Limitations

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

Je vous suggère de mettre un peu arrondi pour les unités les plus proches N qui suffisent pour votre module. La valeur numérique de ce que vous avez est 0.000000000000000122. Cinq chiffres après la virgule décimale devraient être bons pour presque tout ce dont vous pourriez avoir besoin pour le module.

+0

je vous remercie pour les informations je vais l'essayer – seghier