剰余演算

整数演算で、割り算の余りを出すのが剰余演算です。基本は、MODです。例えば、
123 7 MOD
では、123を7で割ったときの余り(4)がスタックに残ります。

負の項があるときは、ちょっと面倒です(私的な感想ですが、あまり数学的でない気がします)。具体的には、第一項が負であるときには負の範囲で余りが出ます。ちょっと記号を使って書けば,sign(n)を、nが正のときは1、nが負のときは-1となる関数(n=0は度外視)、min(a,b)は、a、bのうち小さい方の値をとる関数、max(a,b)はa、bのうち大きい方の値をとる関数とします。このとき、|n|はnの絶対値とすると
n1 n2 MOD
の結果Rは、
min(sign(n1)*|n2|,0) < R < max(sign(n1)*|n2|,0),またはR=0
の範囲で値をとります。

くだくだしいのは、私のまとめ方が悪いせいです。すみません。このような結果は、むしろ、整数の割り算の結果から考えれば納得できます。このような割り算は、フロアード(Floored)と言われます。

整数の割り算では、端数は捨てられます(丸め込み)。すると、商は絶対値で見たとき内輪(0に近い)側の整数が採用されることになります。この商と割る数(後の項)をかけ算した結果は割られる数(初めの項)より0に近くなりますから、その差(剰余)は、割られる数が負なら負か0、正なら正か0になるのです。

剰余と商の両方を出す演算子もあります。
/MOD ( n1 n2 -- n'1 n'2 ) \ n'1が剰余、n'2が商


関連項目:






最終更新:2019年06月19日 09:46