Обычно операцию по модулю также называют операцией взятия остатка, и обе возвращают остаток в качестве результата..remиmodЕдинственное различие:
Когда x и y имеют одинаковый знак, результаты обеих функций идентичны; когда x и y имеют разные знаки, знак результата функции rem совпадает со знаком x, а mod следует за y.
Это потому, что у этих двух функций разные механизмы формирования: rem использует функцию fix, а mod использует функцию floor (эти две функции используются для округления; fix округляет в сторону 0, а floor округляет в сторону отрицательной бесконечности). Команда rem(x, y) возвращает x - n.*y. Если y не равен 0, где n = fix(x./y). А mod(x, y) возвращает x - n.*y; когда y не равен 0, n = floor(x./y).
Закономерность значений при взятии по модулю двух целых чисел с противоположными знаками (то же правило применяется к десятичным дробям; это, по-видимому, отличается от языка C)
Сначала рассматривайте оба целых числа как положительные, затем выполните деление:
- 1. Когда делится нацело, значение равно 0
- 2. Когда не делится нацело, значение = делитель × (целое частное + 1) - делимое
Пример:mod(36,-10)=-4
То есть: 36 разделить на 10 даёт целое частное 3, плюс 1 даёт 4; его произведение на делитель равно 40; тогда разность с делимым равна (40-36=4); берём знак делителя. Значит, значение равно -4.
Пример: mod(9,1.2)=0.6;
Пример:
>> mod(5,2) ans =1 % 除数是正,余数就是正 >> mod(-5,2) ans =1 >> mod(5,-2) ans =-1 % 除数是负,余数就是负 >> mod(-5,-2) ans =-1 % 用 rem 时,不管除数是正是负,余数的符号与被除数的符号相同 >> rem(5,2) ans =1 % 被除数是正,余数就是正 >> rem(5,-2); ans =1 >> rem(-5,2) ans =-1 % 被除数是负, 余数就是负 >> rem(-5,-2) ans =-1
Не спешите, вникните; они действительно разные.