Se fate i calcoli a mano in binario doppia precisione, che è limitato a 53 bit significativi, si vedrà quello che sta succedendo:
129,95 = 1,0000001111100110011001100110011001100110011001100110 x 2^7
129,95 * 100 = 1.1001011000010111111111111111111111111111111111111111011 x 2^13
Questo è lungo 56 bit significativi, in modo arrotondato a 53 bit è
1,10010110000101111111111111111111111111111111111111 11 x 2^13, pari
12994,999999999998181010596454143524169921875
Ora 129,95 * 10 = 1.01000100110111111111111111111111111111111111111111111 x 2^10
Questo è 54 bit significativi lunghe, in modo arrotondato a 53 bit è 1,01000100111 x 2^10 = 1299,5
Ora 1.299,5 * 10 = 1,1001011000011 x 2^13 = 12995.
fonte
2010-10-30 01:56:09
Molto probabilmente a causa della rappresentazione binaria di numeri in virgola mobile. Non si può scrivere estesamente 129,95 nella base 2 presumo. –
Link obbligatorio: [Ciò che ogni scienziato informatico dovrebbe sapere circa l'aritmetica virgola mobile] (http://docs.sun.com/source/806-3568/ncg_goldberg.html) –
Eventuali indizi sul perché questo NON sta accadendo per me? Sto cercando di dimostrarlo e inserisco 129.95 * 100 come sopra in IRB e ottengo inaspettatamente la risposta corretta. – Joel