是否存在由浮点溢出引起的已知安全问题?

时间:2017-07-03 21:46:02

标签: exception floating-point overflow ieee-754

IEEE754标准似乎通过引入无穷大表示给浮点溢出一个通过。在我看来,浮点数比整数更容忍溢出。我的问题是,浮点溢出有多危险?是否存在由未检测到的浮点溢出引起的已知安全问题?

(众所周知的Ariane 5爆炸是由双重> long int转换引起的,这不是这里讨论的适当的浮点溢出。)

1 个答案:

答案 0 :(得分:1)

在需要高安全级别的情况下,您应检查可能以实质性方式影响结果的所有错误。这听起来是同义反复的,但仍然是主要原则,没有人可以从他的侧面观察更多信息,而不是深入细节。但是一些一般的食谱仍然可以表达。特别是,如果你得到INF作为结果,这可能意味着你根本没有结果,因为你不知道这个无穷大出现的时间,因此,整个结果将被删除。 NaN也是如此。

请记住,IEEE754是 IEEE 标准,因此,它适用于硬件实施的简易性,至少对于基本操作而言,具有所有相关的特性和限制。存在IEEE754不令人满意的情况:这包括更高的精度,可变的精度(参见例如“用于更短精度的舍入”==“von Neumann舍入”),用于错误跟踪的区间算法等等。对他们来说,应该使用软件实现。

但是,IEEE754仍然提供了一些措施来涵盖最常见的案例集。它支持所有中间操作的“异常”(并且,如此处已知的,值为INF和NaN),对于无法提供结果但仍能表达 fast 中的差异的情况和便宜的方式。如果您关注计算中的所有可能问题,至少应该

  • 计算前清除异常
  • 做计算
  • 检查两者:最终值(在您确定这符合您的情况之前,它们都不应是INF或NaN)和异常(至少:溢出,除以0,域错误)。

再说一遍,这不包括所有情况,但通常是大多数情况。

这是非常具体情况的,是否值得您注意下溢和不精确的异常。大多数不精确异常的情况根本不可避免,在物理相关的计算中并不重要,但它们在十进制浮动或定点财务计算中至关重要。下溢可能是灾难性取消等严重问题的征兆。

  

(众所周知的Ariane 5爆炸是由双重> long int转换引起的,这不是这里讨论的适当的浮点溢出。)

实际结果没有主要区别 - 它是及时检测到的溢出,但是没有处理相应的异常。