Введение
Остаток после вычисления
В математике остаток — это величина, "оставшаяся" после выполнения некоторой операции. В арифметике остаток — это целое число, "оставшееся" после деления одного целого числа на другое с получением целого частного (целочисленное деление). В алгебре многочленов остаток — это многочлен, "оставшийся" после деления одного многочлена на другой. Операция взятия по модулю — это операция, которая выдает такой остаток при заданных делимом и делителе. Кроме того, остаток — это то, что остается после вычитания одного числа из другого, хотя это точнее называется разностью. Такое употребление встречается в некоторых начальных учебниках; в разговорной речи оно заменяется выражением "остальное", например, "Верните мне два доллара, а остальное оставьте себе". Однако термин "остаток" все еще используется в этом смысле, когда функция аппроксимируется разложением в ряд, где выражение для погрешности ("остаток") называется остаточным членом.
Для числа с плавающей запятой
Когда a и d – числа с плавающей точкой, при этом d не равно нулю, a можно разделить на d без остатка, и частное будет другим числом с плавающей точкой. Однако, если частное ограничено целым числом, то понятие остатка всё равно необходимо. Можно доказать, что существует единственное целое частное q и единственное вещественное остаток r, такие что a = qd + r, где 0 ≤ r < |d|. Расширение определения остатка для чисел с плавающей точкой, как описано выше, не имеет теоретического значения в математике; однако, многие языки программирования реализуют это определение (см. операцию взятия по модулю).
В языках программирования
Хотя в определениях нет никаких трудностей, возникают проблемы при реализации, когда отрицательные числа используются при вычислении остатка от деления. Разные языки программирования используют разные соглашения. Например:
Pascal выбирает положительный результат операции mod, но не допускает отрицательных или нулевых значений для d (следовательно, равенство 1=a = (a div d) × d + a mod d не всегда верно). C99 выбирает остаток того же знака, что и делимое a. (До C99 язык C допускал другие варианты.) Perl и Python (только в современных версиях) выбирают остаток того же знака, что и делитель d. Scheme предлагает две функции: remainder и modulo. Ada и PL/I имеют mod и rem, а Fortran – mod и modulo; в каждом случае первая функция согласуется по знаку с делимым, а вторая – с делителем. Common Lisp и Haskell также имеют mod и rem, но mod использует знак делителя, а rem – знак делимого.
Scheme offer two functions, remainder and modulo – Ada and PL/I have mod and rem, while Fortran has mod and modulo; in each case, the former agrees in sign with the dividend, and the latter with the divisor. Common Lisp and Haskell also have mod and rem, but mod uses the sign of the divisor and rem uses the sign of the dividend.