Ciò è dovuto al modo in cui floating point numbers are represented. Non è vero che 1.0
è esattamente 100 volte 0.01
(per quanto i punti mobili sono rappresentati internamente). L'operatore //
esegue la divisione e pianifica il risultato, quindi è possibile che internamente il numero sia leggermente inferiore a 100.0
e questo lo porta ad essere a quota 99.0
.
Inoltre, Python 3.x utilizza a different approach per mostrare il numero in virgola mobile rispetto a Python 2.x. Ciò significa che il risultato di, sebbene internamente leggermente inferiore a 100.0
, verrà visualizzato come 100.0
poiché l'algoritmo ha determinato che il numero è abbastanza vicino a 100.0
da considerare uguale a 100.0
. Questo è il motivo per cui 1.0/0.01
viene visualizzato come 100.0
anche se questo non può essere rappresentato internamente come esattamente quel numero.
fonte
2015-06-14 17:18:26
Grazie per la risposta dettagliata. Anche se la logica è chiara, questo comportamento è fuorviante in un'operazione così intuitiva. – Baba
@Baba: forse ma questo è uno degli avvertimenti dell'uso di numeri in virgola mobile. Ci sono molti più numeri in virgola mobile di quanto un computer possa sperare di rappresentare in modo accurato, quindi questo è qualcosa di cui essere consapevoli quando si usano numeri in virgola mobile. –