小企鵝輸入法(FCITX)·仿極點五筆特殊符號輸入編碼表
Common Lisp常用輔助工具

rem和mod的區別

λ posted @ 2011年12月06日 18:27 in Mixture with tags lisp tutorial , 3425 阅读

我不清楚remmod兩種運算是否遵從什麼標準,也不瞭解它們從何而來,不過對於LISP來說,它是有標準的就OK了。它們對負數的運算方式也不難記憶,在此我只是提供一種記憶的方法。

細說rem&mod(remainder&modulo)

大家先來回顧一下小學學過的除法運算,被除數除以除數,得到商和餘數(只考慮整數運算):

a ÷ b = q … r

r = a - q × b

而取模運算,就是只要得到那個餘數r就可以了。

其實要記憶好remmod處理負數時的區別,也要考慮下那個商q的。正負相除得負,負負相除得正,這就是得到q的規律。r是最後才來確定的。下面就開始講解remmod吧。

rem:使商向「內」取整

向「內」取整是什麼意思呢?就是指讓商的絕對值儘量小,就像用truncate函數把不求餘的商的絕對值的小數部分截掉一樣。就舉例說明吧:

7 ÷ 3 ≈ 2.3

7 rem 3 = 2 … 1

7 rem -3 = -2 … 1

-7 rem 3 = -2 … -1

-7 rem -3 = 2 … -1

明白了吧?我就不廢話了。

mod:使商向「下」取整

向「下」取整即讓商的值儘量小(不是說絕對值),如經過floor函數處理一樣。例:

7 ÷ 3 ≈ 2.3

7 mod 3 = 2 … 1

7 mod -3 = -3 … -2

-7 mod 3 = -3 … 2

-7 mod -3 = 2 … -1

OK,解說完畢。

其它資料

或許大家已經發現,對於rem來說,餘數的符號與被除數的相等,而mod的則是與除數相等。

另外可到此處瞭解:http://www.franz.com/support/documentation/8.1/ansicl/dictentr/modrem.htm


本網站無註明「轉載」的著作均由Jak Wings製作 CC BY-NC-SA 2.5
Creative Commons 保持署名-相同方式分享 2.5

Avatar_small
Rrandom 说:
Dec 07, 2011 10:18:11 PM

racket里
分别叫做remainder和modulo
> (remainder 1 3)
1
> (modulo 1 -3)
-2
> (remainder 1 -3)
1

remainder叫做取余.modulo叫做取模...

Avatar_small
λ 说:
Dec 07, 2011 11:12:21 PM

-_-;感覺都一個意思,「模」好像是mo的擬聲。Racket竟然會用這麼完整的名稱啊……嗯,從結果看來,是同一標準的。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter