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