Если я наберу:
int main() { return 0 % 0; }
Я возвращаю ошибку:
error C2124: divide or mod by zero
В чем причина этого? Разве ответ не ноль?
Если я наберу:
int main() { return 0 % 0; }
Я возвращаю ошибку:
error C2124: divide or mod by zero
В чем причина этого? Разве ответ не ноль?
В математике x mod 0
не определено, отсюда и ошибка.
Из стандарта С++, раздел 5.5:
Если во время вычисления выражения результат не определен математически или не находится в диапазоне представляемых математических значений для его типа, поведение не определено. [...] Обработка деления на ноль, формирование остатка с использованием делителя нуля и все исключения с плавающей запятой различаются в зависимости от машины и обычно настраиваются библиотечной функцией.
Поскольку остаток от деления на ноль математически не определен независимо от того, на какое число делится, ответ не определен в соответствии со стандартом C++.
Функция mod фактически аналогична функции целочисленного деления, за исключением того, что она дает вам остаток, а не частное. На ноль делить нельзя...
(Кстати, 0/0 — это даже не бесконечность, это неопределенность.)
x%0 == 0
будет представлять собой исключение из принципа, согласно которомуx%y < y
. Что касается значений с плавающей запятой, я думаю, чтоfmod(x,0)
следовало бы определить как ноль, учитывая, что математически говоря, для любого x предел как (y->0) fmod(x,y) равен нулю. - person supercat   schedule 31.10.20130/0
не определено, поскольку не существует уникального значенияx
, для которого0*x==0
, существует ровно одно возможное значение y, такое что0*x+y == 0
. - person supercat   schedule 31.10.2013