編程語言中,取餘和取模的區別究竟是什麼?

    取餘,遵循儘量讓商向0靠近的原則取模,遵循儘量讓商向負無窮靠近的原則符號相同時,二者不會衝突。
    好比,7/3=2.3,產生了兩個商2和37=3*2+1或7=3*3+(-2)。所以,7rem3=1,7mod3=1。符號不一樣時,二者會產生衝突。
    好比,7/(-3)=-2.3,產生了兩個商-2和-37=(-3)*(-2)+1或7=(-3)*(-3)+(-2)。所以,7rem(-3)=1,7mod(-3)=(-2)函數

    解釋:爲何遵循的是這樣的原則?在matlab中,關於取餘和取模是這麼定義的:
    當y≠0時:取餘:rem(x,y)=x-y.*fix(x./y)  取模:mod(x,y)=x-y.*floor(x./y)其中,
    fix()函數是向0取整,
    floor()函數是向負無窮取整之前邊的運算爲例:7/(-3)=-2.3,
    在這個運算中,x爲7,y爲-3,分別調用fix()和floor()兩個函數,
    獲得結果是:fix(-2.3)=-2floor(-2.3)=-3因此,rem(7,-3)=1,mod(7,-3)=-2.net

    一般,取模運算也叫取餘運算,它們返回結果都是餘數.rem(取餘)和mod(取模)惟一的區別在於:
     當x和y的正負號同樣的時候,兩個函數結果是等同的;
     當x和y的符號不一樣時,rem函數結果的符號和x的同樣,而mod和y同樣。
 blog

例子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)=1rem

例子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)=1d3

例子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)=-1matlab

例子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)=-1d3

 

本文爲博主原創文章,轉載請註明出處!ps

https://my.oschina.net/u/3375733/blog/ab

相關文章
相關標籤/搜索