2013-01-14 80 views
0

這是爲什麼?flash:Math.pow計算大數的錯誤答案

當我嘗試:

Math.pow(2.58)= 288230376151711740 ,而在實際上,它是288230376151711744

Math.pow(2,57)= 144115188075855870 雖然它真的等於144115188075855872

它只是拋出該數字沒有任何警告。 我會理解它是否在達到最大值的情況下停止超過某個數字。然而,這似乎是正確計算前n個數字,然後在數字的最後出錯

回答

3

您已經用盡了Number類型的顯示精度。訣竅是當冪爲2時,變量中存儲的實際值將是精確的,而當您追蹤它時,引擎會將顯示的值截斷16位數,因爲它在進程中分爲10,並且剩餘部分將最終擊中如果與沒有指數部分取得的原始值相比「機器零點」。這是爲了防止顯示不精確的浮點分割產生的白噪聲。如果您將進入大於整數/浮點數的位置,則可以解決此問題,該位數存儲的位數多於雙精度數。

+0

嗯,我的意思是一個2的冪的數字有一個尾數爲全零(以及一個隱含的前導一個)和一個適當的指數部分,因此精確地存儲在雙精度數字中。順便說一句,這是真的,有64位的尾數是雙倍的56位?維基百科說52. – Vesper

+0

謝謝你的答案。現在我必須找到一種方法來在動作中表示一個非常大的數字。你有什麼建議?例如, – user151496

+0

http://www.google.com/search?btnG=1&pws=0&q=biginteger+actionscript,問題非常老舊,並且針對任何編程語言都存在某些解決方案。 (BTW,這些評論對於LMGTFY ... heh) – Vesper