【发布时间】:2014-09-03 11:56:54
【问题描述】:
就语言定义而言,JavaScript 数字是 64 位浮点数。
(除了使用 32 位整数的按位运算。我想后者即使在 64 位 CPU 上也是必需的,例如,即使 CPU 可以做得更好,1 << 33 也必须为 2,以实现向后兼容性。 )
但是,如果编译器可以证明一个数字仅用作整数,它可能更愿意将其实现为效率,例如
for (var i = 0; i < Math.pow(2, 40); i++)
console.log(i)
显然希望用整数来实现这一点,在这种情况下,必须使用 64 位整数来保证正确性。
现在考虑这种情况:
for (var i = 0; i < Math.pow(2, 60); i++)
console.log(i)
如果使用浮点数实现,上述方法将失败,因为浮点数无法准确表示大于 53 位的整数。
如果使用 64 位整数实现,它可以正常工作(嗯,除了不方便的长时间运行)。
JavaScript 编译器允许(根据标准的字母和与实际现有代码的兼容性)在提供与浮点数不同但更好的结果的情况下使用 64 位整数?
同样,如果 JavaScript 编译器提供了超过 40 亿个元素的数组,是否允许将数组长度和索引实现为 64 位整数?
【问题讨论】:
标签: javascript 64-bit