【问题标题】:Why does a%b produce SIGFPE when b is zero?当 b 为零时,为什么 a%b 会产生 SIGFPE?
【发布时间】:2009-07-04 01:00:16
【问题描述】:

今天我正在跟踪我刚刚编写的一些代码中的浮点异常。花了一点时间才找到,因为它实际上是由取整数模零引起的。显然,不会定义任何 mod 零,但我认为错误如此具有误导性,这很奇怪。在 C++ 模运算符中,它将对两个整数使用浮点数是什么? (我使用的是 gcc 4.3.2)

这是一个演示错误的简单程序。

int main()
{
    int a=3,b=0;
    int c=a%b;
    return 0;
}

【问题讨论】:

    标签: c++


    【解决方案1】:

    操作触发SIGFPE:

    SIG 是信号的常用前缀 姓名; FPE 是 浮点异常。虽然 SIGFPE 不一定涉及 浮点运算,没有 无需更改名称的方法 破坏向后兼容性。

    GDB 对此比较清楚,称之为“算术异常”:

    (gdb) run
    Starting program: /home/emil/float
    
    Program received signal SIGFPE, Arithmetic exception.
    0x0804837d in main () at float.c:4
    4           int c=a%b;
    

    【讨论】:

      【解决方案2】:

      看看this page

      您问题的相关部分:

      SIG 是信号名称的常用前缀; FPE 是浮点异常的缩写。虽然 SIGFPE 不一定涉及浮点运算,但在不破坏向后兼容性的情况下无法更改其名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 2021-10-06
        • 2010-12-08
        • 2017-02-08
        • 2011-05-30
        • 2019-10-27
        • 2014-11-02
        相关资源
        最近更新 更多