我一直在看关于64位IEEE浮点表示中53位精度的废话。有人能给我解释一下世界上一个卡在1上的位是如何对数字精度做出任何贡献的吗?如果你有一个bit0卡在1上的浮点单元,你当然会知道它产生的精度比正常情况下少了1位。这方面的敏感性在哪里?
此外,仅仅是指数,即没有尾数的缩放因子,就完全指定了数字的前导位在哪里,所以从来没有使用过前导位。第53位和第19洞一样真实。它只是帮助人类思维和以二进制访问这些值的逻辑的(有用的)拐杖。否则就是重复计算。
要么所有声称第53位废话的书籍和文章都是错的,要么我是个白痴。但是卡住了一点就是卡住了一点。让我们听听相反的论点。
IEEE-754 64位二进制浮点对象的数学意义1有53位。它由专门用于意义的52位字段和指示53rd位是0还是1的指数字段中的一些信息组合而成。
由于主要的有意义的字段是52位,有些人将有意义的称为52位,但这是草率的术语。有意义的字段不包含有关有意义的所有信息,完整的有意义的是53位。
从不使用有效数的前导位是不正确的(作为1以外的任何东西)。当指数的编码为零时,有效数的前导位是0而不是更频繁的1。
1“有效”是首选术语,而不是“尾数”有效数是线性的,尾数是对数的。
这里的关键概念是“归一化”。在一般的科学记数法中,每个值都有许多表示。这使得算术,尤其是比较,变得比必要的更困难。常见的解决方案是要求有效数的最高有效数字非零。例如,我使用的第一个浮点系统是以16为底,有效数的前导数字在1到F的范围内。
这对二进制浮点有一个特殊的影响。有效数的最高有效位是一个非零位。在一个已知非零的位上浪费物理表示中有限数量的位是没有意义的。
IEEE754 64位二进制中的正常数具有53位有效位,其隐式前导位已知为1,其余52位存储在物理表示中。
没有免费午餐这种东西,这是有成本的。成本是对给定指数可以存储多小的数字的限制。对于大多数指数来说,这并不重要——数字只是用一个较小的指数存储,仍然有一个不需要存储的前导位。
对于零指数来说,这将是一个真正的限制,因为没有更小的指数可以使用。IEEE754二进制浮点数通过不同的方式存储非常小的数量级数字来解决这个问题。它们最多有52个有效位,全部存储,允许前导零。这允许非常小的数量级数字被表示为非零数字,代价是精度降低。
无穷大和NaN的存储方式不同,所有的都是指数。
它没有卡住。指数会移动“卡住”的位,这样它就不会被困在固定的位置
事实上,隐藏位总是归一化后的最高有效位。因为它总是设置在一个归一化的值中,所以没有必要显式保存它。忽略它会增加一点精度,这是一件好事
因此,代替1.xxx… xxx×2exp,我们将存储0.xxx…xxx×2exp,并在对其进行操作之前将整数部分设置为1。隐藏位确实会影响结果的值,而不仅仅是毫无意义地躺在那里。这与我们将十进制值范围标准化为[0,1)时相同。在这种情况下,整数部分始终为零,并且可以省略(在某些文化中)。释放的空间可以用于另一个精度数字