可能重複:
Why can't decimal numbers be represented exactly in binary?爲什麼0.1 * 3 = 0.3
我讀this問題,並在評論中發現這個(關於共產主義鴨子的答案)。確定我沒有失去理智後,我發現自己好奇。
那麼爲什麼是0.1 * 3!= 0.3?
(注意,這個問題是關於遊戲開發和數學的哪些領域,遊戲開發人員應該熟悉)
可能重複:
Why can't decimal numbers be represented exactly in binary?爲什麼0.1 * 3 = 0.3
我讀this問題,並在評論中發現這個(關於共產主義鴨子的答案)。確定我沒有失去理智後,我發現自己好奇。
那麼爲什麼是0.1 * 3!= 0.3?
(注意,這個問題是關於遊戲開發和數學的哪些領域,遊戲開發人員應該熟悉)
療法的原因是,只有那些2的冪數可以精確用一個簡單的二進制表示表示。
一個二進制數的個別數字是2個不同的功率和任何數目因此是不同功率的2
0.1
總和不對應於2的冪,並且不能從不同總結2的冪。因此它只能用一定的誤差表示。你可以找到一個更詳細的解釋和例子here
如果你需要精確的數字,你基本上結合使用整數。我不確定其他語言,但是在java中有幾個類設計用於精確地解決這個問題,以適應精確性至關重要的應用,如財務計算。最突出的是BigInteger和BigDecimal
這是由於IEEE 754,這是計算機存儲浮點數的方式。
利用該表示,0.1不能被精確地甚至由一個96位浮點數來表示。對於這個問題,0.3也不能,但如果後者是0.1,那麼不能準確地表示0.1,這意味着將其乘以3不會完全產生0.3。
多個重複項,在SO問題中搜索浮點數 – sdcvvc 2011-12-22 13:01:44