浮点溢出的方式有哪些?

时间:2013-09-30 11:49:34

标签: floating-point

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

1 个答案:

答案 0 :(得分:3)

术语“溢出”仅指超出IEEE 754-2008的过度幅度结果7.4:当且仅当超出目标格式的最大有限数时,才应发出溢出异常的信号。圆形浮点结果(见4)的量值是无限的指数范围。“

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

发生无效操作:

  • 对信令NaN的任何通用计算或信令计算操作。 (这不包括询问“这是NaN吗?”等操作,信号NaN可能是普通操作数,而不是特殊操作数。)
  • 将无穷大乘以零(直接或以融合乘法相加)。
  • 添加符号相反的无穷大或用相同的符号减去无穷大。
  • 将零除以零或无穷大为无穷大。
  • 除数为零或分子为无穷大时的余数。
  • 值小于零的平方根。
  • 当结果不适合目标格式或当一个操作数是有限的而另一个是无限的时,“量化”操作。
  • 当结果太大或NaN或无穷大时,将浮点数转换为整数。
  • 使用特别指定给予NaN的信号的操作与NaN进行比较。
  • 当操作数为NaN,无穷大或零时,某些整数对数函数。

除以零时发生:

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

发生下溢:

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

(虽然在检测到微小的非零结果时技术上会发生下溢异常,但如果启用了默认异常处理且最终舍入结果是精确的,则会忽略它并且没有可观察到的效果。)

发生以下错误:

  • 操作的舍入结果与确切的数学结果不同。

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