¿Por qué a% b produce SIGFPE cuando b es cero?

Hoy estaba rastreando una excepción de punto flotante en un código que acababa de escribir. Tomó un poco de tiempo encontrarlo, ya que en realidad fue causado por tomar un cero de mod de número entero. Obviamente, hacer algo mod cero no se va a definir, pero me pareció extraño que el error fuera tan engañoso. ¿Qué hay dentro del operador de módulo C ++ que usaría un punto flotante para dos enteros? (Estoy usando gcc 4.3.2)

Aquí hay un programa simple para demostrar el error.

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta