IEEE 754 和机器编号
IEEE 754 and machine numbers
我一直在尝试结合 IEEE 754 标准来了解机器编号,例如单位舍入 (u) 和 epsilon (e)。我的教科书陈述了一些对我来说没有意义的事情。
根据我的教科书,单位四舍五入是:
- 对于单精度(尾数为23位):u = 6e-8
- 对于双精度(尾数为 52 位):u = 2e-16
我一直在尝试用两个关系推导出这些结果的公式:
- 我的教科书说:"In binary arithmetic with rounding we usually have e = 2*u"
- e = 2^-n,n是尾数位数
然后,这些组合结果将给出: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 “有效数”是首选术语。 “尾数”是对数的小数部分的旧术语。有效数是线性的。尾数是对数的。
我一直在尝试结合 IEEE 754 标准来了解机器编号,例如单位舍入 (u) 和 epsilon (e)。我的教科书陈述了一些对我来说没有意义的事情。
根据我的教科书,单位四舍五入是:
- 对于单精度(尾数为23位):u = 6e-8
- 对于双精度(尾数为 52 位):u = 2e-16
我一直在尝试用两个关系推导出这些结果的公式:
- 我的教科书说:"In binary arithmetic with rounding we usually have e = 2*u"
- e = 2^-n,n是尾数位数
然后,这些组合结果将给出: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 “有效数”是首选术语。 “尾数”是对数的小数部分的旧术语。有效数是线性的。尾数是对数的。