JS样式的“整数”有多少位可用现在数学? [英] How many bits are available for JS-style "integer" math now?

查看:217
本文介绍了JS样式的“整数”有多少位可用现在数学?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

解决上一个问题我遇到了更有趣的事情。

While solving my previous question I faced even more funny thing.

尝试整数数学(是的,我知道它们内部不是太整数)看看如何有很多位:

Try integer math (yes, I know they aren't "too integer" inside) to see how much bits are available:

var n = 0xffffffff;
// loop over 1P:
for(var i=1; i<=1024*1024*1024*1024; i*=16) {
    var v=(n*i).toString(16);
    console.log('i='+i+'; v='+v+' ('+v.length*4+')');
}
// Output:
// i=1; v=ffffffff (32) 
// i=16; v=ffffffff0 (36) 
// i=256; v=ffffffff00 (40) 
// i=4096; v=ffffffff000 (44) 
// i=65536; v=ffffffff0000 (48) 
// i=1048576; v=ffffffff00000 (52) 
// i=16777216; v=ffffffff000000 (56) 
// i=268435456; v=ffffffff0000000 (60) 
// i=4294967296; v=ffffffff00000000 (64) 
// i=68719476736; v=ffffffff000000000 (68) 
// i=1099511627776; v=ffffffff0000000000 (72)
// i=17592186044416; v=ffffffff00000000000 (76) 
// i=281474976710656; v=ffffffff000000000000 (80)

I.e。至少有80位可用......他 - 他!

I.e. at least 80 bits are available... He-he!

你很快就会得到一个不可变的数字!

You'll get an "immutable number" quite soon!

n=0xffffffffffffffff // 64-bit wanted
18446744073709552000 // what? even decimal for odd hex?
n.toString(16)
"10000000000000000" // ooops...
n-1
18446744073709552000
n-2
18446744073709552000
n-4
18446744073709552000

所以, JS有多少位可用现在是样式整数数学吗?

在FireFox 51 64位调试器中测试过。

Tested in FireFox 51 64-bit debugger.

答案后的更多插图:

var n = 0xffffffffffffffff;
for(var i=1; i<=1024*1024; i*=2){
    console.log('i='+i+'; v='+(n/i-1).toString(16));
}
/* Output:
i=1; v=10000000000000000 
i=2; v=8000000000000000 
i=4; v=4000000000000000 
i=8; v=2000000000000000 
i=16; v=1000000000000000 
i=32; v=800000000000000 
i=64; v=400000000000000 
i=128; v=200000000000000 
i=256; v=100000000000000 
i=512; v=80000000000000 
i=1024; v=40000000000000 
i=2048; v=1fffffffffffff 
i=4096; v=fffffffffffff 
i=8192; v=7ffffffffffff 
i=16384; v=3ffffffffffff 
i=32768; v=1ffffffffffff 
i=65536; v=ffffffffffff 
i=131072; v=7fffffffffff 
i=262144; v=3fffffffffff 
i=524288; v=1fffffffffff 
i=1048576; v=fffffffffff
*/


推荐答案

您的计算不正确,因为只是因为整数n存在,并不意味着每个小于n的整数都存在。最大安全整数是2 ^ 53 - 1

Your calculations aren't correct, because just because integer n exist, doesn't mean that every integer smaller than n exists. Maximum safe integer is 2^53 - 1

所以正确的答案是:53位。

So the correct answer is: 53 bits.

Number.MAX_SAFE_INTEGER

这篇关于JS样式的“整数”有多少位可用现在数学?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆