2016-10-17 43 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