Javascript中的无符号32位整数

问题描述:

如何在Javascript中模拟32位无符号整数而没有任何外部依赖关系?与x >>> 0x | 0窍门不工作(乘法,他们似乎工作加法/减法),并乘倍失去双倍精度。Javascript中的无符号32位整数

例如,尝试乘以2654435769 * 340573321(mod 2^32)。结果应该是1.

​​有乘法。加/减/划分怎么样?

Here's a link to wolfram alpha,呈现上面的公式。

+0

但'2654435769 * 340573321'的结果不适用于32位...... – 2012-07-28 18:42:14

+0

@ŠimeVidas:但是它的mod 2^32;如果我正确地理解了这一点,那就是他在计算之后所做的。 – pimvdb 2012-07-28 18:43:49

+0

@pimvdb:是的,这就是32位无符号整数的工作原理 - 所有操作都以2^32模2进行。 – user1367401 2012-07-28 18:45:57

32位无符号整数符合Javascript的64-bit float - 执行加法,减法或除法时不应该有精度损失。只需要使用0xffffffff来保护32位整数。乘法超出了适合的范围,但您已经有了解决方案。

+0

然而,精度乘法后的乘积可能不够高,因为乘以32位整数可以得到64位整数,而64位浮点数只能表示53位有效位。有没有更好的办法? – 2016-11-07 01:27:01