我覺得很多人搞不清楚這兩個概念的區(qū)別,剛好在翻譯lua手冊時遇到%與math.fmod這兩個操作,順便做一下說明吧。
求模與求余的區(qū)別。
假設(shè)對a與b兩個整數(shù)做求?;蚯笥嗖僮?。那么第一步是先求整數(shù)商c,即a / b的值,第二步是計算?;蛴鄶?shù):a - c * b。求模與求余的區(qū)別在于怎么處理a / b的值。
求模運算時,a / b的結(jié)果向無窮小方向舍入,求余運算時a / b的結(jié)果向0方向舍入。
因此,求模時結(jié)果的符號與b一致,求余時結(jié)果的符號與a一致。
在Lua中4%(-3)等于-2,由此可以看出lua的%是求模操作而不是求余操作。4/(-3)向無窮小舍入為-2,則模數(shù)為4 - (-2 * -3) = -2。
在Lua中math.fmod(4,-3)等于1,因此fmod是求余操作而不是求模操作。4/(-3)向0方向舍入為-1,則余數(shù)為4-(-1 * -3)= 1。
很容易可以得出另一個結(jié)論:如果a,b都是正整數(shù)的話,求模與求余沒有區(qū)別。