Si vous faites les calculs à la main en binaire double précision, qui est limitée à 53 bits significatifs, vous verrez ce qui se passe:
129,95 = 1,0000001111100110011001100110011001100110011001100110 x 2^7
129,95 * 100 = 1.1001011000010111111111111111111111111111111111111111011 x 2^13
Ceci est de 56 bits de poids fort longtemps, alors arrondi à 53 bits, il est
1,10010110000101111111111111111111111111111111111111 11 x 2^13, ce qui équivaut à
12994,999999999998181010596454143524169921875
Maintenant 129,95 * 10 = 1.01000100110111111111111111111111111111111111111111111 x 2^10
C'est de 54 bits significatifs à long, donc arrondi à 53 bits c'est 1,01000100111 x 2^10 = 1299,5
maintenant 1299,5 * 10 = 1,1001011000011 x 2^13 = 12995.
Très probablement en raison de la représentation binaire des nombres à virgule flottante. Vous ne pouvez pas écrire 129.95 en base 2, je suppose. –
Lien obligatoire: [Ce que tout scientifique informatique devrait savoir à propos de l'arithmétique en virgule flottante] (http://docs.sun.com/source/806-3568/ncg_goldberg.html) –
Des indices sur les raisons pour lesquelles cela ne se produirait pas pour moi? J'essaie de le démontrer, et j'entre 129.95 * 100 comme ci-dessus dans IRB et je reçois de manière inattendue la bonne réponse. – Joel