54 votes

Pourquoi numpy.power renvoie 0 pour les petits exposants alors que math.pow renvoie la réponse correcte?

 In [25]: np.power(10,-100)
Out[25]: 0

In [26]: math.pow(10,-100)
Out[26]: 1e-100
 

Je m'attendrais à ce que les deux commandes renvoient 1e-100. Ce n'est pas un problème de précision non plus, car le problème persiste même après avoir augmenté la précision à 500. Existe-t-il un paramètre que je peux modifier pour obtenir la réponse correcte?

72voto

Andrew Jaffe Points 9205

Oh, c'est bien "pire" que ça:

 In [2]: numpy.power(10,-1)   
Out[2]: 0
 

Mais ceci est un indice de ce qui se passe: 10 est un entier, et numpy.power ne contraint pas les nombres à flotter. Mais cela fonctionne:

 In [3]: numpy.power(10.,-1)
Out[3]: 0.10000000000000001

In [4]: numpy.power(10.,-100)
Out[4]: 1e-100
 

Notez toutefois que l'opérateur de puissance, ** , ne convertit flotter:

 In [5]: 10**-1
Out[5]: 0.1
 

34voto

John Greenall Points 1006

La méthode numpy suppose que vous voulez que l'entier soit retourné puisque vous avez fourni un entier.

 np.power(10.0,-100) 
 

fonctionne comme on peut s'y attendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X