rem和mod的區別
我不清楚rem
和mod
兩種運算是否遵從什麼標準,也不瞭解它們從何而來,不過對於LISP來說,它是有標準的就OK了。它們對負數的運算方式也不難記憶,在此我只是提供一種記憶的方法。
細說rem&mod(remainder&modulo)
大家先來回顧一下小學學過的除法運算,被除數除以除數,得到商和餘數(只考慮整數運算):
a ÷ b = q … r
r = a - q × b
而取模運算,就是只要得到那個餘數r就可以了。
其實要記憶好rem
和mod
處理負數時的區別,也要考慮下那個商q的。正負相除得負,負負相除得正,這就是得到q的規律。r是最後才來確定的。下面就開始講解rem
和mod
吧。
rem:使商向「內」取整
向「內」取整是什麼意思呢?就是指讓商的絕對值儘量小,就像用truncate
函數把不求餘的商的絕對值的小數部分截掉一樣。就舉例說明吧:
7 ÷ 3 ≈ 2.3
7
rem
3 = 2 … 17
rem
-3 = -2 … 1-7
rem
3 = -2 … -1-7
rem
-3 = 2 … -1
明白了吧?我就不廢話了。
mod:使商向「下」取整
向「下」取整即讓商的值儘量小(不是說絕對值),如經過floor
函數處理一樣。例:
7 ÷ 3 ≈ 2.3
7
mod
3 = 2 … 17
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
Dec 07, 2011 10:18:11 PM
racket里
分别叫做remainder和modulo
> (remainder 1 3)
1
> (modulo 1 -3)
-2
> (remainder 1 -3)
1
remainder叫做取余.modulo叫做取模...
Dec 07, 2011 11:12:21 PM
-_-;感覺都一個意思,「模」好像是mo的擬聲。Racket竟然會用這麼完整的名稱啊……嗯,從結果看來,是同一標準的。