2011-05-31 76 views
4

我需要在JavaScript中進行整數除法,這隻能給我使用雙精度浮點數。通常我只是做Math.floor(a/b)(或a/b | 0)並完成它,但在這種情況下,我正在以鎖步方式執行模擬,並且需要確保跨機器和運行時的一致性,無論它們是使用64位還是80位內部精確。與浮點運算一致的整數除法

到目前爲止我還沒有注意到任何不一致,但我還沒有能夠確定地說服自己,他們不會發生。所以我在想:

  1. 假設ab分別爲0..2^31-1和1..2^31-1是整數,其是從JavaScript Math.floor(a/b)(和a/b | 0)結果保證在機器和運行時間保持一致?

  2. 爲什麼或爲什麼不?

回答

2

我的猜測是否定的。答案將取決於以下因素:

  1. ECMA Script的瀏覽器供應商實現。

  2. ECMA Script的特定版本是否指定該一致性級別(通常不是)。

  3. 您可能未意識到的最終用戶機器上的其他外部因素。

浮點運算是非常容易發生舍入誤差。儘管認爲所有這些數字都在小數點右側是準確的,但讓兩臺運行完全不同硬件和軟件配置的計算機達成一致計算可能就像放牧貓一樣。