0

据我所知,一种方法是指数可能太大而无法表示。符号位和尾数/小数也可能发生溢出吗?

4

1 回答 1

3

术语“溢出”仅指幅度过大的结果,根据 IEEE 754-2008 7.4:“当且仅当目标格式的最大有限数的幅度超过了四舍五入的浮点数时,才会发出溢出异常信号。点结果(见 4)是无界的指数范围。”</p>

您的问题似乎对其他例外表现出兴趣。也就是说,在其他情况下,达到了浮点算术的界限并且无法提供数学上理想的结果。IEEE 754 规定了无效操作、被零除、上溢、下溢和不精确的例外情况。

发生无效操作:

  • 对信令 NaN 的任何通用计算或信令计算操作。(这不包括诸如询问“这是一个 NaN 吗?”之类的操作,其中一个信号 NaN 可能是一个正常的操作数,而不是一个异常的操作数。)
  • 将无穷大乘以零(直接或在融合乘加中)。
  • 加上符号相反的无穷大或减去符号相同的无穷大。
  • 将零除以零或无穷大除以无穷大。
  • 除数为零或分子无穷大时的余数。
  • 小于零的值的平方根。
  • 当结果不适合目标格式或一个操作数是有限的而另一个是无限的时,一种“量化”操作。
  • 当结果太大或为 NaN 或无穷大时,将浮点数转换为整数。
  • 如果给定 NaN,则使用专门指定用于发出信号的操作与 NaN 进行比较。
  • 当操作数为 NaN、无穷大或零时,一些整数对数函数。

除以零发生在:

  • 对于有限的操作数(例如,3/0 但不是无穷大/1),会出现精确的无限结果。

下溢发生在:

  • 检测到一个微小的结果(在次正常区间内)。这取决于实现:用于下溢标准的结果可能是精确的数学结果,也可能对其有效数进行四舍五入。

(虽然从技术上讲,当检测到微小的非零结果时会发生下溢异常,但如果启用了默认异常处理并且最终的舍入结果是精确的,它会被忽略并且没有明显的影响。)

不精确发生在:

  • 运算的舍入结果与精确的数学结果不同。

请注意,尽管可能会发生异常,但您正在编程的语言可能会忽略它们并且不会导致它们生成陷阱(程序控制的异常更改)。语言或其实现中可能有也可能没有用于启用陷阱或检查指示是否发生异常的状态标志的规定。

于 2013-09-30T14:03:43.657 回答