1

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

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

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

请帮忙!!!谢谢

4

2 回答 2

4

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

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

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

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


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

于 2013-09-27T16:13:09.430 回答
1

The only possibility I see for getting an underflow on subtraction is to disable denormalized numbers. If you could do that, there would be pairs of distinct doubles whose difference would be too small to represent as a non-zero double.

于 2013-09-27T20:16:28.627 回答