Hugh
Hugh
> @mmmmmaster 我来回答一下这两个问题吧 😋 > ① 十进制的 0.1 转换成二进制后,结果的确是 0.0001100110011001100(无限循环),这个二进制再进行 64 位浮点数存储得到:`0011111110111001100110011001100110011001100110011001100110011010` ,然后再将这个64位二进制转换回十进制的时候,得到的就是:`0.100000000000000005551115123126`。这个转换可以通过在线网站:http://www.binaryconvert.com/convert_double.html 进行 > > ②首先我们要知道 `[-2^53, +2^53]` 这个范围是称为 safe integers,超出这个范围的数字,就是 unsafe integers。对于对于 (2^53, 2^63) 之间的数会出现什么情况呢? > > >...
👇最大安全整数,IEEE 754标准一共有53位的尾数(包含省略的1位),类似于科学计数法,尾数表示的是精度,一个数对应一个IEEE 754的双精度浮点数,所以是安全的,当多个数对应一个浮点数的时候就是不安全的 `Math.pow(2, 53) - 1 === Number.MAX_SAFE_INTEGER` 👇最大数,根据IEEE 754标准的定义来的。为什么指数减去52,因为尾数表示的是1.1111(52位),尾数左移指数减去对应的位数,所以这个就是最大值 `1 * Math.pow(2, 1023 - 52) * (Math.pow(2, 53) - 1) === Number.MAX_VALUE`