IEEE 754 和机器编号

IEEE 754 and machine numbers

我一直在尝试结合 IEEE 754 标准来了解机器编号,例如单位舍入 (u) 和 epsilon (e)。我的教科书陈述了一些对我来说没有意义的事情。

根据我的教科书,单位四舍五入是:

我一直在尝试用两个关系推导出这些结果的公式:

然后,这些组合结果将给出:u = 2^-(n+1),同样 n 是尾数位数。使用 u 的不同精度的给定结果检查此公式:

对于单数:u = 2^-(23+1) = 5.96e-8,这个结果是对的。 对于 double: u = 2^-(52+1) = 1.11e-16,这个结果不校验。

有人可以帮我推导出正确的单位舍入公式,或者指出我一直在犯的一些错误吗?感谢所有帮助。

这似乎是你的课本中的一个错误。

IEEE-754 基本 32 位和 64 位二进制浮点格式的有效数分别为 24 位和 53 位。1 有时表示有效数是23位和52位,但这是一个错误。这些是用于对有效数字进行编码的主要字段的大小,但是完整的 24 位有效数字在主要有效数字字段中编码为 23 位,在指数字段中编码为 1 位。类似地,完整的 53 位有效数字在主有效数字字段中编码为 52 位,在指数字段中编码为 1 位。 (全有效数的前导位来自指数域:如果指数域为零,则前导有效位为 0。如果指数域既不为零也不全为 1,则前导有效位为 1。如果指数域都是1,浮点对象是一个特殊值,要么是无穷大,要么是NaN。)

当24位有效位的前导位表示值1时,最低位表示值2−23。这就是所谓的epsilon。当一个实数被四舍五入到最接近的可表示浮点值时,最大误差是最低有效位值的一半。 (因为,如果它超过两个数字之间距离的一半,我们会选择另一个方向的数字,因为它更近。)

对于一个53位的有效位,最低位表示相对于前导位的值2−52,四舍五入时的最大误差是其一半。所以,对于前导位为1,最大舍入误差应该是2−53,也就是1.11•10−16。如果你书上说是2−16,那是不正确的。

脚注

1 “有效数”是首选术语。 “尾数”是对数的小数部分的旧术语。有效数是线性的。尾数是对数的。