顯然簡單的十進位分數如同 0.1 或 0.7
不能在不丟失一點點精度的情況下轉換為內定二進位的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10)
通常會返回 7 而不是預期中的
8,因為該結果內定的表示其實是類似 7.9999999999...。
這和一個事實有關,那就是不可能精確的用有限位數表達某些十進位分數。例如,十進位的
1/3 變成了 0.3333333. . .。
所以永遠不要相信浮點數結果精確到了最後一位,也永遠不要比較兩個浮點數是否相等。若果確實需要更高的精度,應該使用任意精度數學函數或是 gmp 函數。
|