Rav*_*ven 21 javascript biginteger
在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;
}
Run Code Online (Sandbox Code Playgroud)
简而言之:它创建了一个最小的整数来存储一个布尔数组.现在我的问题是javascript显然使用浮点数作为默认值.我必须创建的最大数量是2 ^ 54-1但是一旦javascript达到2 ^ 53,它就会开始做奇怪的事情:
9007199254740992+1 = 9007199254740994
Run Code Online (Sandbox Code Playgroud)
有没有办法在javascript中使用整数而不是浮点数?还是大整数求和?
mar*_*ona 18
Javascript在内部使用浮点.
什么是数字可以达到的JavaScript的最高整数值而不会丢失精度?
换句话说,你不能使用超过53位.在一些实现中,您可以限于31.
尝试将这些位存储在多个变量中,使用字符串或获取bignum库,或者如果您只需要处理整数,则需要使用biginteger库.
BigInt 正在作为 JavaScript 的本机功能添加。
typeof 123;
// ? 'number'
typeof 123n;
// ? 'bigint'
Run Code Online (Sandbox Code Playgroud)
例子:
const max = BigInt(Number.MAX_SAFE_INTEGER);
const two = 2n;
const result = max + two;
console.log(result);
// ? '9007199254740993'
Run Code Online (Sandbox Code Playgroud)
javascript现在对有了实验性支持BigInt。
在撰写本文时,仅chrome支持此功能。
caniuse尚无任何条目。
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); // falseRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41985 次 |
| 最近记录: |