可以添加太多浮点数导致浮点无效操作'?

时间:2016-11-22 14:24:45

标签: c++ floating-point invalidoperationexception

鉴于数字相对较小(〜-1到~1)并且是浮点数并且是随机生成的,你是否可以获得浮点无效操作'添加太多了吗?我问,因为那是我现在的计划中发生的事情,而且很少发生。另外,如何禁用(或避免)此异常?

以防万一,我的编译器是gcc(i686-posix-dwarf-rev0,由MinGW-W64项目构建)5.1.0。

编辑根据要求我提供代码。但是,添加导致错误的浮动只是我的推测,这就是我来到这里的原因,以确定这是否是我的问题。如果我在下面运行代码,我可以得到错误是否合理?

#include <iostream>

int main()
{
    float sum = 0, add = 0;
    while (true)
    {
        add = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
        if (rand() % 2) add *= -1;
        sum += add;
    }
}

编辑2:我没有收到上述代码的错误,我只需要知道它是否会发生。

1 个答案:

答案 0 :(得分:1)

IEEE 754标准定义了以下情况:发生“无效操作”浮点异常:

  • 使用信令NaN进行操作
  • 乘以0×∞或∞×0
  • 加/减无穷大,如∞-∞,-∞+∞等
  • 除以0/0或∞/∞
  • 当y = 0或x =∞时计算x / y的余数,并且NaN
  • 都不计算
  • 取负数的平方根
  • 当结果不适合目标格式或当一个操作数是有限的而另一个是无限的时,量化
  • 将NaN,∞或超出目标范围的浮点数转换为整数
  • 将无序浮点值与信令进行比较
  • 计算NaN,∞或0
  • 的整数对数

您的示例代码不会触发任何这种情况,因此问题会出现在代码的其他位置。