2011-12-01 58 views
-3

可能重複:
Is JavaScript's Math broken?奇怪的運算精度

我在ocaml的運算精度源泉奇怪的問題。看:

# 1.1+.2.2;; 
- : float = 3.30000000000000027 

它只發生在我做的時候:something.1 + something.2。有人可以試試嗎?

+9

這並不奇怪,這是浮點數的內在。你是第1000名(棒球場)用戶偶然發現這一點。 – delnan

+10

[每位計算機科學家應瞭解的浮點算術知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

回答

5

這是使用浮點值的現實。儘管1.1用兩位數表示完全以十進制表示,但它需要無限數量的二進制數字來表示該值。由於您正在以有限數量的位存儲1.1二進制文件,因此會發生舍入錯誤。

1

Ocaml浮點數是IEEE754雙精度數字。你在其他編程語言中會有相同的行爲。也許你想漂浮bignums(Ocaml不提供)。

計算機總是有限的精度本機數字(很像計算器)。