提问者:小点点

65位数字如何在JavaScript中存储在64位中?


在Douglas Crockford的《JavaScript如何工作》一书的“数字如何工作”一章中提到,JavaScript中的数字由1个有符号位、11个指数位和53个有效位组成。这总计为65位,一些巧妙的编码允许将这65位存储在64位中,我们将其理解为64位浮点数。

更进一步,有效数字存储为0.5范围内的二进制分数

在这种形式中,最高有效位始终是1。由于该位始终是1,因此不需要将其存储在数字中。这会产生一个奖励位。

我不明白

  1. 最高有效位(符号位)如何始终为1?
  2. 如果不存储符号位,它如何区分正数和负数?

请帮助我理解这个概念,或者引导我朝着可以帮助我的方向前进。


共1个答案

匿名用户

Crockford所指的双精度浮点格式的分数(尾数)部分有52位,而不是53位:

维基百科的文章提到了“有效精度”他们是这样解释的:

该格式是使用具有值为1的隐式整数位的有效数编写的。由于分数(F)有效数的52位出现在内存格式中,因此总精度为53位(大约16个十进制数字,53 log10(2)≠15.955)。

这一定是克罗克福德所说的“巧妙编码”从程序员的角度来看,除非你在做一些奇异的事情,比如位旋转或整数铸造,否则这并不重要。这就是为什么克罗克福德没有进一步解释它。

相关:是52位还是53位浮点精度?