Почему 0 мод 0 ошибка?

0

Если я напечатаю:

int main() { return 0 % 0; }

Я возвращаю ошибку:

error C2124: divide or mod by zero

В чем причина этого? Разве ответ не равен нулю?

Теги:
math
visual-c++
modulo
divide-by-zero

3 ответа

9
Лучший ответ

В математике x mod 0 не определено, следовательно, ошибка.

  • 0
    Хорошо, я признаю, что не знал этого. (Я никогда даже не думал об этом раньше.) Думаю, я пойду спросить на Math.SE ... спасибо.
  • 4
    0x499602D2, вы слишком категоричны. Одно соглашение состоит в том, что x (mod 0) равен x. Обоснование таково: в модульной арифметике z ≡ x (mod y) означает, что существует некоторое целое число k такое, что z - x = k * y. Если y = 0, то мы получаем z - x = 0 или z = x.
3

Из стандарта C++, раздел 5.5:

Если во время оценки выражения результат не определяется математически или нет в диапазоне представимых математических значений для его типа, поведение не определено. [...] Обработка деления на ноль, формирование остатка с использованием делителя нуля, и все исключения с плавающей запятой различаются между машинами и обычно регулируются библиотечной функцией.

Поскольку остаток от деления на ноль математически неопределен, независимо от того, какое число разделяется, ответ не определен в соответствии со стандартом C++.

2

Функция mod фактически совпадает с функцией целочисленного деления, за исключением того, что она дает вам остаток, а не частное. Вы не можете делить на ноль...

(BTW, как в сторону, 0/0 даже не бесконечность, она неопределенная.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню