前のページ|次のページ

MOD関数

第1引数を第2引数で除算したときの(最も期待しない浮動小数点の結果を避けるためにファジー化した)余りを返します。

カテゴリ: 数学

構文

必須引数

argument-1

除数を指定する数値定数、変数または式です。

argument-2

除数を指定する数値定数、変数または式です。

制限事項 0にはできません

詳細

MOD関数は、argument-1argument-2で除算したときの余りを返します。結果がゼロ以外のとき、結果は第1引数と同じ符号になります。第2引数の符号は無視されます。
次の条件の両方を満たす場合、MOD関数で実行される計算は厳密になります。
  • 両方の引数が厳密な整数である。
  • すべての整数が、厳密に8バイトの浮動小数点で表されるいずれかの引数より小さい。
    正確な計算で最大整数を判定するには、次のDATAステップを実行します。
    data _null_;
       exactint=constant('exactint');
       put exactint=;
    run;
    動作環境の情報: 最大整数の詳細については、現在の動作環境向けのSASドキュメントを参照してください。
前述の条件のいずれかを満たしていない場合、浮動小数点計算で小さな数値誤差が発生する可能性があります。この場合の例を次に示します。
  • 余りが0か第2引数の値にとても近いと、MODはゼロを返す。
  • 約3桁以上の精度で余りを計算できなければ、MODは欠損値を返す。この場合、ログにエラーメッセージが書き込まれる。
注: SAS 9より前のバージョンでは、MOD関数は前述した調整を余りに対して実行しませんでした。このため、SAS 9 でのMOD関数の結果は、前のバージョンとは異なる場合があります。

比較

MOD関数とMODZ関数の比較を次に示します。
  • MOD関数は、ファジーと呼ばれる追加の計算を実行し、厳密なゼロを返す(ファジーを実行しなければ数値誤差のため結果はゼロにならない)。
  • MODZ関数はファジーを実行しない。
  • 約3桁以上の精度で余りを計算できなければ、MOD関数とMODZ関数はどちらも欠損値を返します。

次のSASステートメントは、MODとMODZのこれらの結果を生成します。
SASステートメント
結果
x1=mod(10, 3);
put x1 9.4;
1.0000
xa=modz(10, 3);
put xa 9.4;
1.0000
x2=mod(.3, -.1);
put x2 9.4;
0.0000
xb=modz(.3, -.1);
put xb 9.4;
0.1000
x3=mod(1.7, .1);
put x3 9.4;
0.0000
xc=modz(1.7, .1);
put xc 9.4;
0.0000
x4=mod(.9, .3);
put x4 24.20;
0.00000000000000000000
xd=modz(.9, .3);
put xd 24.20;
0.00000000000000005551

関連項目:

前のページ|次のページ|ページの先頭へ