Math
Если у вас есть такое уравнение:
x = 3 mod 7
x может быть... -4, 3, 10, 17,... или более обычно:
x = 3 + k * 7
где k может быть любым целым числом. Я не знаю, что модульная операция определена для математики, но факторное кольцо, безусловно, есть.
Python
В 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 <iostream>
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
ISO/IEC 14882: 2003 (E) - 5.6 Мультипликативные операторы:
Двоичный/оператор дает частное, а двоичный оператор% дает остаток от деления первого выражения на второй. Если второй операнд/или% равен нулю, поведение undefined; в противном случае (a/b) * b + a% b равно a. Если оба операнда неотрицательный, тогда остаток неотрицателен; если нет, знак остаток определяется реализацией 74).
и
74). Согласно работам по пересмотру ISO C, предпочтительный алгоритм для целочисленного деления следует правилам, определенным в стандарт ISO Fortran, ISO/IEC 1539: 1991, в котором всегда округляется до нуля.
Источник: ISO/IEC 14882: 2003 (E)
(Я не мог найти бесплатную версию ISO/IEC 1539:1991
. Кто-нибудь знает, где ее получить?)
Операция, похоже, определяется следующим образом:
Вопрос:
Имеет ли смысл определять это так?
Каковы аргументы для этой спецификации? Есть ли место, где люди, которые создают такие стандарты, обсуждают это? Где я могу что-то прочитать о причинах, почему они решили сделать это таким образом?
В большинстве случаев, когда я использую modulo, я хочу получить доступ к элементам структуры данных. В этом случае я должен убедиться, что мода возвращает неотрицательное значение. Таким образом, для этого случая было бы хорошо, что мода всегда возвращала неотрицательное значение. (Еще одно использование: Евклидовой алгоритм. Поскольку вы могли бы сделать оба числа положительными, прежде чем использовать этот алгоритм, имеет значение знак modulo.)
Дополнительный материал:
См. Wikipedia для длинного списка того, что modulo делает на разных языках.