▼タブ展開
▼床と天井 時々,SASの切捨関数の定義を混乱することがある.int 関数は明快だが,床と天井という floor 関数と ceil 関数の定義である.floor 関数はどの言語にもあるが,ceil 関数はSASに特有ではなかろうか?.なぜなら floor 関数さえあれば,ceil 関数は冗長だからである.しかし,あって邪魔ではない.一様乱数を整数化するときには ceil 関数を使えばきれにに書ける.たとえば区間 (1,300)の整数一様乱数を作るときに,多くの言語が持っている floor 関数を使うと, ran = floor( ranuni( seed ) * 300 ) + 1 ; と書く.しかし,ceil 関数があれば, ran = ceil( ranuni( seed ) * 300 ) ; と書ける. +1 を書かなくてもいい,というだけであるが・・・. intは単なる切捨関数で整数部分を返す.floorとceilは床と天井の整数を返すのである. int と floor は正の領域では等しい結果を返すが,引数が負の場合は異なる値を返す. int と ceil は負の領域では等しい結果を返すが,引数が正の場合は異なる値を返す. floor() 引数以下(引数と同じか,引数より小さい)の最大整数を返す.引数の値と最近隣整数値との差の絶対値が10-12以内の場合,それは整数であると見なされ(つまり10-12以下は0であると扱われ)その整数の値を返す. ceil() 引数以上(引数と同じか,引数より大きい)の最小整数を返す.引数の値と最近隣整数値との差の絶対値が10-12以内の場合,それは整数であると見なされ(つまり10-12以下は0であると扱われ)その整数の値を返す. 文字通り,床と天井の図を書くと明白になる.床と天井という関数名は実にうまい,センスがいい. − 3 | | | − 2 (天井) | | ←−−−−引数 | − 1 (床) | | | − 0 | | | − -1 |
引数 | floor() | ceil() |
---|---|---|
3 | 3 | 3 |
2.1 | 2 | 3 |
-1.6 | -2 | -1 |
-2.4 | -3 | -2 |
-1-1.e-11 | -2 | -1 |
1-1.e-11 | 0 | 1 |
1+1.e-11 | 1 | 2 |
-1-1.e-12 | -2 | -1 |
-1+1.e-12 | -1 | -1 |
1-1.e-12 | 1 | 1 |
1+1.e-12 | 1 | 2 |
-1-1.e-13 | -1 | -1 |
1-1.e-13 | 1 | 1 |
1+1.e-13 | 1 | 1 |