【问题标题】:Causing underflow in ieee-754 floating point format using subtraction使用减法导致 ieee-754 浮点格式下溢
【发布时间】:2013-09-27 14:46:56
【问题描述】:

这似乎很基本,但我在回答以下问题时遇到了很多麻烦:

给出以 IEEE754 格式表示的两个数字 X 和 Y,这样计算 X-Y 将导致下溢。

据我了解,每个操作都可能导致下溢,但在我的一生中,我找不到减法示例。

请帮忙!!! 谢谢

【问题讨论】:

  • 我认为这是一个家庭作业问题,因此不会提供直接答案。在哪些条件下,浮点减法的结果的幅度远小于两个输入的幅度?在您正在查看的浮点格式中仍然可以以标准化方式表示的最小浮点数的大小是多少?通过结合这两个问题的答案,您应该能够找到原始问题的答案。

标签: floating-point floating-accuracy ieee-754 floating-point-precision underflow


【解决方案1】:

当默认异常处理生效时,产生微小(在次正常区间1)非零结果的减法在概念上会导致下溢异常,但没有可观察到的效果,因为:

  • 产生微小结果的减法必然是精确的,这是由于浮点格式的特性(没有有效位低于次正规值中的位,并且减法与乘法不同,在数学上不能有任何低位比输入中的要多)。
  • IEEE 754-2008 标准规定,当默认异常处理存在下溢且结果准确时,不会引发任何标志(包括下溢标志)。而且,由于默认异常处理生效,因此没有陷阱(程序控制的异常更改)。

对于家庭作业,您可以执行一个结果很小的减法并合理地声称发生了下溢异常,即使没有引发标志也没有发生陷阱。

要创建下溢异常的可观察效果,​​您需要将下溢异常的处理从默认更改为其他方式,例如在发生下溢时启用陷阱。执行此操作的方法取决于语言。


1 在 32 位二进制格式中,如果一个数字的大小小于 2–126,则该数字很小。在 64 位格式中,如果一个数字的大小小于 2–1023,则该数字很小。 IEEE 754 标准允许在将结果四舍五入到正常有效数字长度之前或之后确定微小度。

【讨论】:

  • 我理解这个概念,我的问题纯粹是理论上的(与语言无关)。我的问题是我必须找到浮点格式的数字。对于我能想到的浮点格式的任何两个数字,它们之间的差异也可以用该格式表示。
  • ...我正在寻找一个单精度格式的两个数字的具体示例,它们之间的减法会导致数量级小于 2^-149 的数字(在单精度格式),如果有人可以提供的话。谢谢:)
  • @mpjunior:结果不必小于可表示的最小正数;它只需要小于最小的正正常数。
  • 谢谢斯蒂芬!这个问题现在更有意义了:)
【解决方案2】:

我看到的减法下溢的唯一可能性是禁用非规范化数字。如果你能做到这一点,就会有一对不同的双精度数,它们的差异太小而无法表示为非零双精度数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2016-12-07
    相关资源
    最近更新 更多