Математика:
Если у вас есть такое уравнение:
x = 3 mod 7
х может быть... -4, 3, 10, 17,... или в более общем случае:
x = 3 + k * 7
где k может быть любым целым числом. Я не знаю, определена ли операция по модулю для математики, но факторкольцо определенно определено.
Питон:
В Python вы всегда будете получать не -отрицательные значения, когда используете %
с положительнымm
:
#!/usr/bin/python
# -*- coding: utf-8 -*-
m = 7
for i in xrange(-8, 10 + 1):
print(i % 7)
Результаты в:
6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3
С++:
#include
using namespace std;
int main(){
int m = 7;
for(int i=-8; i <= 10; i++) {
cout << (i % m) << endl;
}
return 0;
}
Выведет:
-1 0 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 0 1 2 3
ИСО/МЭК 14882 :2003 (Е)-5.6 Мультипликативные операторы:
The binary / operator yields the quotient, and the binary % operator yields the remainder from the division of the first expression by the second. If the second operand of / or % is zero the behavior is undefined; otherwise (a/b)*b + a%b is equal to a. If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined 74).
и
74) According to work underway toward the revision of ISO C, the preferred algorithm for integer division follows the rules defined in the ISO Fortran standard, ISO/IEC 1539:1991, in which the quotient is always rounded toward zero.
Источник:ИСО/МЭК 14882 :2003 (E)
(Я не смог найти бесплатную версию ISO/IEC 1539:1991
. Кто-нибудь знает, откуда его взять?)
Операция, по-видимому, определяется так:
Вопрос:
Имеет ли смысл так определять?
Каковы аргументы в пользу этой спецификации? Есть ли место, где люди, создающие такие стандарты, обсуждают это? Где я могу прочитать что-нибудь о причинах, почему они решили сделать это таким образом?
В большинстве случаев, когда я использую модуль, я хочу получить доступ к элементам структуры данных. В этом случае я должен убедиться, что мод возвращает не -отрицательное значение. Итак, в этом случае было бы хорошо, если бы мод всегда возвращал не -отрицательное значение. (Другим вариантом использования является алгоритм Евклида . Поскольку вы могли бы сделать оба числа положительными перед использованием этого алгоритма, знак по модулю будет иметь значение.)
Дополнительный материал:
См. Википедия для получения длинного списка того, что модуль делает на разных языках.