【问题标题】:How to tell if a number is exactly representable as a 32-bit IEEE float?如何判断一个数字是否完全可以表示为 32 位 IEEE 浮点数?
【发布时间】:2020-01-18 15:57:05
【问题描述】:

这是我教科书中的一个任务

给定一个字长为 32 位的假设计算机,按以下方式划分:
符号位 1 位
9 位偏置指数
23位尾数部分

2^-1 + 2^-29 是这台计算机上的机器号吗? 我该如何确定这一点?

【问题讨论】:

  • 32 位不能分成 1 个符号位、9 个指数位和 23 个有效位,因为 1+9+23 = 33,而不是 32。有时关于有效位的措辞是混乱的,因为数学有效位可以是 x+1 位,而有效位的主要编码使用 x 位(从指数编码派生的多 1 位)。 IEEE-754 标准 binary32 格式使用 1-8-23,因此我们怀疑,由于 1+9+23=33 表示错误并且数字接近 1-8-23,因此格式为 1-8- 23.但是教科书可能会故意使用非标准格式。这应该澄清......
  • ... 除了它不会改变答案的事实; 2^-1 和 2^-29 对于 23 位或 24 位有效位来说相距太远。

标签: floating-point binary bit cpu-architecture ieee-754


【解决方案1】:

2^-1 + 2^-29 是这台计算机上的机器号吗?
我该如何确定这一点?

假设假设格式使用基数 2(未指定),那么 2-1 和 2-29 都可以精确表示为 2 的小幂。让我们称他们为a_1a_29 并假设a_1 > a_29 > 0

"1 位为符号位, 9位偏置指数, 23 位尾数部分”类似于binary32。如果它遵循所有这些规则(包括次法线),那么不同值之间的任何减法都不会导致 0。这对于下一步很重要。

设置和/差acc = a_1 +/- a_29acc_1 = acc - a_1。如果acc_1 == +/-a_29,则acc 被精确表示,否则acc 不完全是和/差a_1 +/- a_29,只是一个四舍五入的结果。

在 2-1 和 2-29 的情况下,差异无法准确表示,因为“23 位尾数部分”太窄而无法准确编码2-1 - 29 的相对差异。为此,我们需要大约“27-28 位尾数部分”。

【讨论】:

  • 关于下溢的有趣点,但问题是关于加法而不是减法。 - 符号在指数中。 (好吧,问题不是真的关于 FP 添加,但在这种情况下,输入都是完全可表示的,因此您可以这样处理。当然,假设二进制浮点数;在我编辑问题之前被标记为 ieee 并且 IEEE 二进制浮点数比 IEEE 十进制浮点数更常见。)
  • @PeterCordes 修正了和/差计算的答案。不会太大改变整体流程。
【解决方案2】:

abs((-1) - (-29)) 大于尾数宽度,所以不,这将需要太多有效数字(尾数位)。

如果您以非指数二进制点表示法写出它们,例如0.10000...0001,则两个之间的差距将大于尾数。 (它就像一个小数点,但它是二进制位值,所以我们称之为二进制点。)

即对于 2-1,2-29 小于 1 ulp。 (ULP = 最后一位的单位 = 尾数的低位。)

二进制浮点数可以表示固定数量的(二进制)“有效数字”,等于尾数宽度,与指数无关。 (https://en.wikipedia.org/wiki/Significant_figures)


请注意,尾数的存储宽度仅为 23 位,但有一个隐含的前导 1(用于规范化数字)。 https://en.wikipedia.org/wiki/Single-precision_floating-point_format

所以 1 + 2-23 是完全可表示的。即 1 ulp 相对于 1.0 = 2^-23。 (相关:https://en.wikipedia.org/wiki/Machine_epsilon 像 C FLT_EPSILON 是 1.0 的半个 ulp,所以 binary32 浮点数为 2^-24。它是您可以添加到 1.0 的最大值,并且仍然将结果舍入到 1.0,即最大添加到1.0时会出现舍入错误)

请注意,许多现代文档使用“有效位”而不是“尾数”,因为它在数学上更正确。

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 2016-03-10
    • 1970-01-01
    • 2016-03-26
    • 2021-11-20
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多