Bon, comme cela m'intriguait, j'ai décidé de sortir du code assembleur pour voir ce que ça donnait, histoire d'en avoir le coeur net. Hé bien, je n'ai pas été déçu : malgré que j'ai mis l'optimisation au plus faible, le programme poussait directement 1000 sur la pile (pour l'afficher après)... au lieu de faire faire le calcul par le FPU. No comment. :aie:
Bon, je suis finalement arrivé à mes fins en feintant quelque peu. Verdict : du coup maintenant je me retrouve également avec 999 comme résultat de l'opération 1 / p avec p = 0.001. :aie:
A mon avis, on ne peut pas y faire grand-chose. Le résultat de l'opération doit être du style 999.99999999... et, une fois converti en entier, cela donne fatalement 999. C'est le problème classique qui survient à cause de la précision des nombres à virgule flottante.
Si 'nb' doit être pair, on peut toujours feinter comme cela :
mais il faut voir ensuite si un tour de boucle supplémentaire peut éventuellement affecter le résultat final.Code:if ( nb % 2 ) nb++;