gpt4 book ai didi

Javascript uint32 数学不起作用?

转载 作者:行者123 更新时间:2023-11-29 17:59:11 27 4
gpt4 key购买 nike

uint32 数学有些奇怪:

a = new Uint32Array([1103515245, 1103527590, 0]);
a[2] = a[0] * a[1];
console.log(a[2]);

给出 2524872960,我认为这是错误的,因为在 C 中:

#include <stdio.h>

int main() {
unsigned a[3] = { 1103515245, 1103527590, 0 };
a[2] = a[0] * a[1];
printf("%u\n", a[2]);
return 0;
}

给出 2524872878(Windows 计算器也是)

那到底是怎么回事呢?我正在使用 Firefox 45.0.1

编辑:哦,如果这是预期的,那么我该如何复制“C”结果?

最佳答案

那是因为 JS 没有 Integer 类型。所以 * 在 64 位 float 中进行乘法。但是这些结果的精度不够:

/* Exact math */ 1103515245 × 1103527590  =  1217759518843109550
/* JavaScript */ 1103515245 * 1103527590 === 1217759518843109600
Number.MAX_SAFE_INTEGER === 0009007199254740991

如果你想做整数乘法,使用Math.imul :

The Math.imul() function returns the result of the C-like 32-bit multiplication of the two parameters.

a[2] = Math.imul(a[0], a[1]); // -1770094418
a[2]; // 2524872878

关于Javascript uint32 数学不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com