代码之家  ›  专栏  ›  技术社区  ›  zell

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

  •  -1
  • zell  · 技术社区  · 7 年前

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

    (众所周知的Ariane 5爆炸是由双长整数转换引起的,这不是本文讨论的适当的浮点溢出。)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Netch    7 年前

    在需要高安全级别的情况下,您应检查可能对结果产生重大影响的所有错误。这听起来有些重复,但仍然是主要原则,没有人能从他的侧面告诉你更多,除非深入挖掘细节。但一些通用配方仍然可以表达。特别是,如果你得到了INF,这可能意味着你根本没有结果,因为你不知道这个无穷大出现的时间有多早,所以,整个结果都会被丢弃。南也是如此。

    IEEE 硬件 实现,至少对于基本操作而言,具有所有相关的特性和限制。有些情况下IEEE754不能令人满意:这包括更高的精度、可变精度(参见“较短精度的舍入”=“von Neumann舍入”)、用于误差跟踪的区间算法等。对于这些情况,应使用软件实现。

    快速的 花钱少的 方法如果你关心计算中所有可能的问题,你至少应该,

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

    下溢和不精确异常是否值得您注意,这取决于具体情况。大多数不精确异常情况都是不可避免的,在物理相关计算中并不重要,但在十进制浮点或定点金融计算中至关重要。下溢可能是灾难性取消等严重问题的迹象。

    (众所周知的Ariane 5爆炸是由双长整数转换引起的,这不是本文讨论的适当的浮点溢出。)