在Douglas Crockford的《JavaScript如何工作》一书的“数字如何工作”一章中提到,JavaScript中的数字由1个有符号位、11个指数位和53个有效位组成。这总计为65位,一些巧妙的编码允许将这65位存储在64位中,我们将其理解为64位浮点数。
更进一步,有效数字存储为0.5范围内的二进制分数
在这种形式中,最高有效位始终是1。由于该位始终是1,因此不需要将其存储在数字中。这会产生一个奖励位。
我不明白
请帮助我理解这个概念,或者引导我朝着可以帮助我的方向前进。
Crockford所指的双精度浮点格式的分数(尾数)部分有52位,而不是53位:
维基百科的文章提到了“有效精度”他们是这样解释的:
该格式是使用具有值为1的隐式整数位的有效数编写的。由于分数(F)有效数的52位出现在内存格式中,因此总精度为53位(大约16个十进制数字,53 log10(2)≠15.955)。
这一定是克罗克福德所说的“巧妙编码”从程序员的角度来看,除非你在做一些奇异的事情,比如位旋转或整数铸造,否则这并不重要。这就是为什么克罗克福德没有进一步解释它。
相关:是52位还是53位浮点精度?