c++integer-divisionsigfpe

Why does integer division by zero produce a floating-point error signal (SIGFPE)?


Today I was tracking down a floating point exception in some code I had just written. It took a little while to find because it was actually caused by taking an integer mod zero. Obviously doing anything mod zero is not going to be defined but I thought it was strange that the error was so misleading. What is it within the C++ modulo operator that would use floating point for two integers? (I'm using gcc 4.3.2)

Here's a simple program to demonstrate the error.

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

Solution

  • The operation triggers SIGFPE:

    SIG is a common prefix for signal names; FPE is an acronym for floating-point exception. Although SIGFPE does not necessarily involve floating-point arithmetic, there is no way to change its name without breaking backward compatibility.

    GDB is a bit clearer about this and calls it "Arithmetic exception":

    (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;