2017-01-26 7 views
3

J'essaie de calculer les nombres les plus proches de 0 mais je n'ai pas pu obtenir ce que je veux jusqu'à présent.Calcul des nombres les plus proches numpy

J'ai un code assez simple;

y = 0.0 
x = 0.1 
while (y + x > y): 
    x = x/2.0 
x*2 

Mais je continue d'obtenir 0.0 en sortie. Comment puis-je résoudre ce problème

Répondre

5

Je suppose que vous voulez garder la division jusqu'à ce que x devient si petite il devient nul (au format virgule flottante). Dans la dernière itération de votre boucle, x devient finalement zéro et la condition de boucle est fausse: 0.0(y) + 0.0(x) > 0.0(y). À la dernière ligne, vous essayez de récupérer la valeur x en multipliant par deux. Mais x est déjà nul, donc le résultat est également nul. Mathématiquement est logique, mais la valeur à virgule flottante est déjà nulle à ce moment-là.

Afin de maintenir la dernière valeur non nulle utiliser une seconde variable:

y = 0.0 
x = 0.1 
smallest_x = x 

while (y + x > y): 
    smallest_x = x 
    x = x/2.0 
x*2 

Ou bien vous vérifier au préalable si x est zéro après divisant une fois de plus:

y = 0.0 
x = 0.1 
while (y + x/2.0 > y): //checking if the next division makes x to zero 
    x = x/2.0 
x*2 

Ou prendre approche différente pour obtenir le plus petit x:

x = 1.0 
while (x/2.0 != 0): 
    x = x/2.0 
3

Vous pouvez simplement utiliser np.nextafter:

>>> np.nextafter(0, 1) 
4.9406564584124654e-324 
3

Peut-être vous chercher juste pour nombre flottant minimal:

import sys 
print(sys.float_info.min)