通常、剰余演算はモジュロ演算とも呼ばれ、どちらも戻り値は余りです。.remとmod唯一の違いは次のとおりです:
x と y の符号が同じ場合、2つの関数の結果は同じになります。x と y の符号が異なる場合、rem 関数の結果の符号は x と同じになり、mod は y と同じになります。
これはこれら2つの関数の生成メカニズムが異なるためです。rem 関数は fix 関数を採用し、mod 関数は floor 関数を採用しています(これら2つの関数は整数化に使われ、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) です。
2つの異符号整数のモジュロ演算の値の規則(小数の場合もこの演算規則になります。この点は C 言語とは少し異なるようです)
まず2つの整数を正の数と見なしてから、除算演算を行います:
- 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
じっくり考えると、両者は確かに異なります。