在JavaScript中,我希望使用以下方法创建大型布尔数组(54个元素)的二进制散列:
function bhash(arr) {
for (var i = 0, L = arr.length, sum = 0; i < L; sum += Math.pow(2,i)*arr[i++]);
return sum;
}
简而言之:它创建最小的整数来存储布尔值数组。现在我的问题是javascript显然使用浮动作为缺省值。我必须创建的最大数量是2^54-1,但是一旦javascript达到2^53,它就开始执行一些奇怪的事情:
9007199254740992+1 = 9007199254740994
在javascript中有使用整数而不是浮动的方法吗?还是大整数求和?
发布于 2010-12-29 12:23:50
JavaScript在内部使用浮点。
什么是JavaScript的最高整数值,一个数字可以在不失去精度的情况下到达?
换句话说,您不能使用超过53位。在某些实现中,您可能被限制为31。
尝试将比特存储在多个变量中,使用字符串或获取bignum图书馆,或者如果只需要处理整数,则使用biginteger库。
发布于 2019-02-10 12:15:27
BigInt
是作为JavaScript的一个本机特性添加的。
typeof 123;
// → 'number'
typeof 123n;
// → 'bigint'
示例:
const max = BigInt(Number.MAX_SAFE_INTEGER);
const two = 2n;
const result = max + two;
console.log(result);
// → '9007199254740993'
发布于 2018-06-07 03:45:54
javascript现在有了BigInt
。
在编写本报告时,只有chrome支持这一点。
犬科还没有进入。
BigInt
既可以与构造函数(例如BigInt(20)
)一起使用,也可以通过附加n
(例如20n
)来使用。
示例:
const max = Number.MAX_SAFE_INTEGER;
console.log('javascript Number limit reached', max + 1 === max + 2) // true;
console.log('javascript BigInt limit reached', BigInt(max) + 1n === BigInt(max) + 2n); // false
https://stackoverflow.com/questions/4557509
复制