Por que um% b produz SIGFPE quando b é zero?

Hoje eu estava rastreando uma exceção de ponto flutuante em algum código que acabei de escrever. Demorou um pouco para encontrar, porque na verdade foi causado por tomar um inteiro mod zero. Obviamente, fazer qualquer coisa como mod zero não será definido, mas achei estranho que o erro fosse tão enganador. O que é dentro do operador de módulo C ++ que usaria ponto flutuante para dois inteiros? (Estou usando o gcc 4.3.2)

Aqui está um programa simples para demonstrar o erro.

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

questionAnswers(2)

yourAnswerToTheQuestion