2016-10-17 89 views
2

我試圖端口一個Python庫爲Javascript,但無意中發現了兩者之間的數值差..按位移位精度

使用Python,1057618395136 >> 16 == 16137976 用JavaScript,1057618395136 >> 16 == 16120

我讀取Javascript中的整數精度是53位,Math.pow(2,53)== 9007199254740991),它仍然在bifshift操作的範圍內,我試圖做..什麼我錯過了嗎?

回答

4

JavaScript按位運算符將浮點值截斷爲32位整數。因此,儘管64位浮點值可以保存53位整數,但不能利用移位運算符的全部53位。

要在JavaScript中向右移位16位,可以除以65536.

+0

謝謝,這很有道理! 出於好奇(我知道這樣的微觀優化是可忽略的),在bitshift和division之間的性能有差異嗎? – Martijnh

+0

@Martijnh好吧,JavaScript運行時可能會認識到你被一個2的冪的常數分開的事實。大多數現代硬件(除了低端手機)可能會做64位移位操作。無論是否有實際的實現,我都不知道。 – Pointy