javascript - JavaScript 实现可以使用 64 位整数吗?

标签 javascript 64-bit

就语言定义而言,JavaScript 数字是 64 位 float 。

(使用 32 位整数的按位运算除外。我想即使在 64 位 CPU 上也必须使用后者,例如 1 << 33 必须为 2,即使 CPU 可以做得更好,为了向后兼容。 )

但是,如果编译器可以证明一个数字仅用作整数,它可能更愿意这样实现它以提高效率,例如

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)

如果用 float 实现,上述方法将失败,因为 float 不能准确表示大于 53 位的整数。

如果使用 64 位整数实现,它工作正常(好吧,除了不方便的长运行时间)。

JavaScript 编译器是否允许(通过标准的字母和与实际现有代码的兼容性)在提供与 float 不同但更好的结果的情况下使用 64 位整数?

同样,如果 JavaScript 编译器提供的数组包含超过 40 亿个元素,是否允许将数组长度和索引实现为 64 位整数?

最佳答案

MDN information about UInt64 : 由于 JavaScript 目前不包含对 64 位整数值的标准支持,js-ctypes 提供了 Int64 和 UInt64 对象,让您可以使用需要(或可能需要)使用的 C 函数和数据使用 64 位数据类型表示的数据。

您使用 UInt64 对象来创建和操作 64 位无符号整数。

关于javascript - JavaScript 实现可以使用 64 位整数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721766/

相关文章:

c++ - CFX_ImageCR3 |无法在运行 ColdFusion 10 64 位的 Windows Server 2008 R2 64 位上加载库

c# - 在 64 位机器上运行 x86 编译代码时,单精度算术被破坏

java - 32 位和 64 位 Eclipse 的区别

javascript - Angular 如何根据另一个元素更新元素宽度

javascript - 绑定(bind)处理程序以形成 'ajax:success' 事件

javascript - 从浏览器到本地连接的 iPhone 的文件传输

com - Windows 64 位注册表对比32位注册表

javascript - 如何使用 Promise 有条件地执行第二个任务?

javascript - 将 ng-class 与 Chart.js 结合使用

在 32 位和 64 位中使用 Entity Framework 的性能差异