JavaScript类型数组:64位整数?

时间:2011-05-18 07:12:40

标签: javascript typed-arrays

在Firefox 4和Chrome 7中实现的JavaScript类型数组是在JavaScript中存储和处理二进制数据的一种非常有效的方式。但是,当前实现仅提供每个成员最多32位的整数视图,Int32ArrayUint32Array。是否计划实施64位整数视图?如何实现64位整数视图?它们会慢多少?

3 个答案:

答案 0 :(得分:16)

实现Int64Array没有实际的方法,因为JavaScript中的所有数字都是64位浮点数字,只有53位精度。就像Simeon在评论中所说的那样,你可以使用一个大的整数库,但速度要慢得多。

如果你确实需要一个64位整数数组,无论性能如何,Google Closure库都有一个64-bit Long class,我认为它比一般的大整数库更快。我从来没有使用它,我不知道你是否可以轻松地将它与图书馆的其他部分分开。

答案 1 :(得分:0)

您可以使用Float64ArrayFloat32Array。 但是我不知道那不是您要的东西,因为它是浮点数。

答案 2 :(得分:0)

如前所述,您不能放心地使用Javascript数字来超越2 ^ 52-1整数,因为在Javascript数字中,数字实际上始终表示为双精度64位浮点数,其中只有53个有效位,其余为指数因此您之后将失去精确的整数精度。

但是至少这里是如何检查Unit8Array中无符号的64位长整数是否小于2 ^ 52-1,然后根据需要安全地读取它的方法:

const dataView = new DataView(unit8Array.buffer);
const hi = dataView.getUint32(0);
if (hi > 0x1fffff) {
  throw new Error(
    'Cannot safely parse uints over 2^53 - 1 (0x1fffffffffffff) in to a 64 bit float.' +
    ' PropertyKey: ' + propertyKey,
  );
}
const lo = dataView.getUint32(4);
const numberValue = (hi * 0xffffffff) + lo;

相关问题