我们知道在 Javascript 中它使用 STD IEEE 754 双精度,并且我们知道尾数部分是 52 位,并且存在隐式 1 位但未存储
但是如果它没有被存储,那么我们实际上是如何表示它的,因为我们可以存储 52 位,即我们正在使用的 1 位?
在 JavaScript 中,与许多使用 IEEE-754 双精度浮点标准的编程语言一样,第 53 位(隐式位)是尾数或有效数表示的一部分,但不进行物理存储。
您需要知道可表示的浮点数范围内的两个不同的区间。
1.归一化
2.次正常或非正常
(标准化)
在 IEEE-754 表示中,如果指数非零,则该数字被视为标准化。在这种情况下,尾数的前导位隐式为 1。
这意味着,虽然尾数字段中仅存储 52 位,但计算机将数字视为尾数为 53 位,第一位为 1。
(次正常)
当指数为 0 时,该数字被视为次正规(非正规化)。在这种情况下,前导位是 0 而不是 1。
对于次正规数,完整精度会略有降低,因为没有隐式前导 1,并且直接使用尾数的 52 位来表示数字,而没有前导 1。
Subnormal 用于表示 -1 到 0 到 1 之间的值范围。
(计算机如何解码)
指数字段:计算机首先检查指数字段。如果为零,则该数字为次正规化,且前导位为 0。如果指数非零,则该数字为标准化,且假定前导位为 1。
尾数字段: 52 位尾数字段与隐式前导位(1 表示标准化,0 表示次标准化)组合形成完整尾数。
为什么要这么做?
这里的这个技巧用于在不需要额外存储空间的情况下获得多一位精度。由于标准化数字在其二进制表示中始终以 1 开头,因此存储它是多余的。