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

3
在Douglas Crockford的书"How JavaScript Works"的章节"How Numbers Work"中提到,JavaScript中的数字由1个有符号位、11个指数位和53个有效位组成。这总共有65位,并且一些聪明的编码方式使得这65位可以存储在64位中,这被我们理解为64位浮点数。
更进一步,有效位以二进制小数形式存储在范围0.5 <= significand < 1.0内。
引用如下:
在这种形式下,最高有效位始终是1。由于该位始终是1,因此无需在数字中存储它。这将产生一个额外的位。
我不理解以下两点:
1. 最高有效位(符号位)是如何始终为1的? 2. 如果不存储符号位,如何区分正负数?
请帮助我理解这个概念或指导我可以找到帮助的方向。
1个回答

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

enter image description here

维基百科文章提到了“有效精度”。他们这样解释:
格式是用具有值为1的隐式整数位的尾数写成的。由于在内存格式中出现了52位分数(F)尾数,因此总精度为53位(约16个十进制数字,53 log10(2)≈15.955)。
这一定是Crockford所说的“巧妙编码”。从程序员的角度来看,除非您正在进行像位操作或整数转换之类的奇特操作,否则它并不太重要。这就是为什么Crockford没有进一步解释它的原因。
相关: 浮点精度是52位还是53位?

谢谢您的澄清。是的,书中讨论的是尾数中的隐藏位。 - Darshna Rekha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接