Вопрос по c++ – Почему% b производит SIGFPE, когда b равно нулю?

22

Сегодня я выслеживал исключение с плавающей запятой в некотором коде, который я только что написал. Потребовалось немного времени, чтобы найти, потому что это было на самом деле вызвано принятием целочисленного мода ноль. Очевидно, что делать что-либо с нулем не будет определено, но я подумал, что странно, что ошибка настолько вводит в заблуждение. Что в операторе C ++ по модулю, который использует числа с плавающей запятой для двух целых чисел? (Я использую gcc 4.3.2)

Вот простая программа для демонстрации ошибки.

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

Ваш Ответ

2   ответа
9

эта страница.

Соответствующая часть для вашего вопроса:

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.

33

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 немного яснее об этом и называет это «Арифметическое исключение»:

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

Похожие вопросы