2010-02-06 38 views
2

我試圖使用類數學打造的Flex/ActionScript 3的計算器,但有一些怪異的結果:ActionScript 3的數學不一致

trace(1.4 - .4); //should be 1 but it is 0.9999999999999999 
trace(1.5 - .5); //should be 1 and it is 1 
trace(1.444 - .444); //should be 1 and it is 1 
trace(1.555 - .555); //should be 1 but it is 0.9999999999999999 

我知道有一些問題,浮點數,但作爲你可以看到,它應該至少在我的所有例子中都失敗了,對嗎?

問題如何在其他計算器中解決,我應該如何繼續爲了在Actionscript 3中構建一個可用的計算器?

謝謝你在前進, 阿德南

+0

這一切看起來非常好,正是你期望從浮點。圍繞它少了幾個地方,你永遠不會注意到。 –

回答

4

歡迎IEEE 754浮點。享受inaccuracies。如果你想避免它們,請使用定點機制。

+0

刪除我的答案,沒有一點有3個答案與他們在同一鏈接;-) –

+0

如何知道我需要多少個固定點? 例如Windows計算器是如何解決這個問題的? –

+0

正常情況下,定點庫將通過根據需要擴展小數位數來處理像這樣的細節。如果您是通過使用整數「手動」來完成此操作,則只需使用較少的位數增加數字的指數,然後按正常方式繼續。 –

0

我會假設大多數計算器顯示的小數位數比其浮點的精度要少。舍入到小於精度水平的小數位應該可以緩解這類問題,但它不能解決所有問題。