Обычно операцию по модулю также называют операцией взятия остатка, и обе возвращают остаток в качестве результата..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

Не спешите, вникните; они действительно разные.