Я нашел функцию в программе, которую я должен исправить, для которой определена функция mod
:
int mod(int a, int b)
{
int i = a%b;
if(i<0) i+=b;
return i;
}
Мне сказали, что a
и b
всегда будут положительнымикстати ...
А? if(i<0)
?
Аргумент: , что
результатом операции по модулю является класс эквивалентности, и любой член класса может быть выбранкак представитель
И только как запоздалая мысль
...;однако обычный представитель - это наименьший положительный остаток, наименьшее неотрицательное целое число, которое принадлежит этому классу, т. е. остаток евклидова деления. Однако возможны и другие соглашения.
Это означает, что 6 % 7
может вернуть 6
(пока все хорошо), но также -1
. Хм ... правда? (Давайте проигнорируем тот факт, что представленная реализация не обрабатывает все случаи.)
Я знаю, что математически верно, что операция по модулю такая. Но потом кто-то еще сказал мне, что C %
на самом деле «не реализует оператор по модулю, а остаток».
Итак, как C определяет оператор %
?
В C-Draft я только нахожу
Результатом оператора / является частное от деления первого операнда на второй;результат оператора% - остаток. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
Означает ли это, что 6 % 7
всегда равно 6
? Или это тоже может быть -1