編程語言中,取余和取模的區別到底是什么?


作者:小婷子
鏈接:https://www.zhihu.com/question/30526656/answer/160437482
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

【取模和求余原理】

定義:a = bq + r 且 0 <= |r| < |b|。

題目:給定a和b,要求mod(a,b)和rem(a,b);

分析:對於滿足a = bq + r 且 0 <= |r| < |b|條件的數據,如果a不能被b整除,有兩對(q,r),其中一對中r為正數(正余數),另一對中r為負數(負余數)。

結果:取模的定義有很多種,不同語言的取模定義可能不一樣,最常見的是:q更趨近無窮小(負無窮)時的r,即mod(a,b);

求余:q更趨近0時的r,即rem(a,b);


【舉例】

例子1:

mod(7,3)=1,rem(7,3)=1

候選組1:(q1,r1)=(2,1) 7=2*3+1

候選組2:(q2,r2)=(3,-2) 7=3*3+(-2)

取模:因為q1比q2更加趨近於負無窮,所以取(q1,r1)=(2,1),mod(7,3)=1

求余:因為q1比q2更加趨近於0,所以取(q1,r1)=(2,1),rem(7,3)=1


例子2:

mod(7,-3)=-2,rem(7,-3)=1

候選組1:(q1,r1)=(-2,1) 7=(-2)*(-3)+1

候選組2:(q2,r2)=(-3,-2) 7=(-3)*(-3)+(-2)

取模:因為q2比q1更加趨近於負無窮,所以取(q2,r2)=(-3,-2),mod(7,-3)=-2

求余:因為q1比q2更加趨近於0,所以取(q1,r1)=(-2,1),rem(7,3)=1


例子3:

mod(-7,3)=2,rem(-7,3)=-1

候選組1:(q1,r1)=(-2,-1) -7=(-2)*3+(-1)

候選組2:(q2,r2)=(-3,2) -7=(-3)*3+2

取模:因為q2比q1更加趨近於負無窮,所以取(q2,r2)=(-3,2),mod(7,-3)=2

求余:因為q1比q2更加趨近於0,所以取(q1,r1)=(-2,-1),rem(7,-3)=-1


例子4:

mod(-7,-3)=-1,rem(-7,-3)=-1

候選組1:(q1,r1)=(2,-1) -7=2*(-3)+(-1)

候選組2:(q2,r2)=(3,2) -7=3*(-3)+2

取模:因為q1比q2更加趨近於負無窮,所以取(q1,r1)=(2,-1),mod(7,-3)=-1

求余:因為q1比q2更加趨近於0,所以取(q1,r1)=(2,-1),rem(7,-3)=-1


【更多】

1、其他的取模運算,例如r必須和a負號相同等等,原理類似,根據條件取模時對候選組進行選擇,因此不再展開。

2、取模在灰度方案和abtest中經常用到(對隨機算法要求不高)。



翻了下百度計算器,對了下答案,米問題,交卷~


【參考】

chensidney‘s blog

MOD(計算機語言取模運算符)_百度百科

取模運算_百度百科

Remainder - Wikipedia

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM