(rontolisp) docs
← cl パッケージの関数

mod

(mod number divisor)

number を divisor で割った余りを、床関数による除算(floored division)で返します。そのため 0 でない結果は常に除数の符号を取ります。これは floor と対をなします。結果を被除数の符号に従わせたい場合は代わりに rem を使用してください。

結果が 0 の浮動小数点数になる場合は 0.0 であり、-0.0 になるのは被除数が -0.0 かつ除数が正のときだけです。mod は floor の第 2 返り値、すなわち商を厳密な整数とした number - divisor*quotient なので、0 の符号は除数に従うのではなく、この減算の結果として決まります。

浮動小数点数の結果は、どの大きさでも厳密な剰余です。number - divisor*quotient は浮動小数点で評価した値ではなく厳密演算での値なので、被除数が 2^53 を超えていても真の剰余が得られます。除数が無限大のとき商は 0 になるため結果は被除数そのものになり、両者の符号が異なる場合は床関数による商が -1 になるので除数側の無限大になります。floor に商がないところでは mod にも剰余がなく、floor と同じエラーを通知します: 除数が 0 なら正確な 0 でも浮動小数点数の 0 でも division-by-zero ((mod 7.5 0)、(mod 7.5 0.0)) で、被除数が NaN や無限大のとき (または除数が NaN のとき) はそれより先に非有限値の丸めを報告します。