【问题标题】:What is wrong with my IEEE 754 floating point representation?我的 IEEE 754 浮点表示有什么问题?
【发布时间】:2016-11-06 08:09:05
【问题描述】:

我在作业中被要求用 IEEE 754 表示法来表示十进制 0.1。以下是我做的步骤:

不过是在线转换器,而这个answer on stack exchange 建议不这样做。他们提出了这个解决方案:

s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
0 01111011 10011001100110011001101

区别在于右边的数字 1。为什么不是1100,为什么是1101?

【问题讨论】:

  • 因为四舍五入。由于该数字在二进制中没有有限表示,因此存储了最接近的近似值。

标签: binary floating-point ieee-754


【解决方案1】:

正如 njuffa 在评论中所说,四舍五入是对您看到的差异的解释。转换器通常会生成与您输入的十进制数最接近的浮点值。IEEE 754 标准建议在从一个基数转换到另一个基数时考虑舍入模式(例如从十进制到二进制),默认舍入模式是“到最近”。

最接近 1/10 的两个单精度浮点值是 1.10011001100110011001100×2-4 和 1.10011001100110011001101×2-4(低于和高于 1/10 )。 被截断的数字是“11001100…”,表明实际的 1/10 更接近上限而不是下限(如果剩余的数字是“100000000…”,那么实数应该正好在-两者之间)。为此,在取整方式转换时,选择上限值1.10011001100110011001101×2-4作为1/10到binary32的转换。

【讨论】:

  • 换句话说,在右侧生成更多位是有意义的,然后检查它们的值以查看是否应该舍入以及朝哪个方向。 @GeorgeStop:阅读有关防护、圆形和粘性位的信息。
  • @RudyVelthuis 我看不出守卫、圆形和粘性位与十进制和二进制之间的转换有什么关系。我们已经讨论过这些转换:这次你能提供一个参考,说明它们应该如何工作吗?
  • 这些是用于舍入的额外位。正如我所说,我会计算更多位并使用这些额外的位(在右侧)进行正确的舍入。有一些公式可以确定何时舍入一个最低有效位,何时不舍入。一个例子:stackoverflow.com/a/8984135/95954.
  • @RudyVelthuis 我知道这三位是什么。为了足够,最后一个必须根据特殊规则计算(它是“粘性的”),这对于二进制操作数的基本算术运算来说足够好,但我不明白这与之间的转换有什么关系十进制和二进制。您的链接也没有显示它们对此有何用处。
  • @RudyVelthuis 如果你喜欢一个具体的例子,这里有一个:我有数字 1e-250,我想计算它最接近的 binary64 表示。守卫、圆形和粘性位在计算的哪一点有帮助?
猜你喜欢
  • 2012-01-06
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 2020-09-18
  • 2020-11-19
  • 2017-04-08
  • 2013-07-24
  • 1970-01-01
相关资源
最近更新 更多