1. 程式人生 > 其它 >取模與取餘的區別

取模與取餘的區別

通常取模運算也叫取餘運算,它們返回結果都是餘數 remmod 唯一的區別在於:

當 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