基础知识
js内部所有数字在计算机内存中的表示都是64位双精度浮点数
双精度浮点数表示法的副作用
使用二进制浮点数(使用IEEE 754的所有语言)的最著名副作用是:
0.1 + 0.2 === 0.3; // false
js最大安全整数的概念
Number.MAX_SAFE_INTEGER // 9007199254740991
这个数字形成的原因是,Javascript 使用 IEEE 754 中规定的双精度浮点数。所谓安全是指在这个范围内的整数,js可以精确地进行表示并精确地进行比较运算,否则就会输出错误的值。
国际标准 IEEE 754 规定,有效数字第一位默认总是1,不保存在64位浮点数之中。也就是说,有效数字总是1.xxxx的形式,其中xxxx的部分(称为尾数或有效数字,负责数字的精度)保存在64位浮点数(见
fraction
部分,共52位),最长可能为52位。因此(算上第一位不显示的位)JavaScript 提供的有效数字最长为53个二进制位。
精度最多只能到53个二进制位,这意味着,绝对值小于2的53次方的整数,即-(253-1)到253-1,都可以精确表示。
参考
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
http://javascript.ruanyifeng.com/grammar/number.html#toc1