Location : Home > Languages > Perl > Package
Title : Math::Round
Toolbox Logo

名称

 Math::Round - 様々な丸め計算


概要

use Math::Round qw(...those desired... or :all);

$rounded = round($scalar);
@rounded = round(LIST...);
$rounded = nearest($target, $scalar);
@rounded = nearest($target, LIST...);

# 他の関数も同様。

説明

 Math::Round は様々な方法で数値を丸める。関数 round 及び nearest はデフォルトでエクスポートされる。他の関数は以下に記述する方法でエクスポートされる。 "use ... qw(:all)" と書けば全関数がエクスポートされる。


関数

round LIST

 最も近い整数に丸める。スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 整数の間にある数値は無限大の方向に丸められる。すなわち正の値は繰りあげられ(例えば 2.5 は 3 になる)、負の値は繰り下げられる(例えば -2.5 は -3 になる)。

round_even LIST

 最も近い整数に丸める。スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 ただし整数の間にある数値は最も近い偶数に丸められる。例えば 2.5 は 2 に、3.5 は 4 に、-2.5 は -2 になる。

round_odd LIST

 最も近い整数に丸める。スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 ただし整数の間にある数値は最も近い奇数に丸められる。例えば 3.5 は 3 に、4.5 は 5 に、-3.5 は -3 になる。

round_rand LIST

 最も近い整数に丸める。スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 整数の間にある値はランダムに切り上げられたり切り下げられたりする。試行回数を大きくすれば 2.5 が 2 になる回数と 3 になる回数はほぼ同じになる。

nearest TARGET, LIST

 最も近い TARGET の倍数の値に丸める。
 TARGET は正でなければならない。
 スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 整数の間にある値は無限大の方向に丸められる。例えば

nearest(10, 44)    =  40
nearest(10, 46)    =  50
nearest(10, 45)    =  50
nearest(25, 328)   = 325
nearest(.1, 4.567) =   4.6
nearest(10, -45)   = -50

nearest_ceil TARGET, LIST

 最も近い TARGET の倍数の値に丸める。
 TARGET は正でなければならない。
 スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 2つの倍数の間の数値は ceiling に、すなわち代数的に高い倍数に丸められる。例えば

nearest_ceil(10, 44)  =  40
nearest_ceil(10, 45)  =  50
nearest_ceil(10, -45) = -40

nearest_floor TARGET, LIST

 最も近い TARGET の倍数の値に丸める。
 TARGET は正でなければならない。
 スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 2つの倍数の間の数値は floor に、すなわち代数的に低い倍数に丸められる。例えば

nearest_floor(10, 44)  =  40
nearest_floor(10, 45)  =  40
nearest_floor(10, -45) = -50

nearest_rand TARGET, LIST

 最も近い TARGET の倍数の値に丸める。
 TARGET は正でなければならない。
スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。2つの倍数の間の数値はランダムに切り上げられたり切り下げられたりする。
 試行回数を大きくすれば nearest(10, 45) が 40 になる回数と 50 になる回数はほぼ同じになる。

nlowmult TARGET, LIST

 LIST で指定された数値を超えない範囲で最大の TARGET の倍数を返す。
 TARGET は正でなければならない。
 スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 2つの倍数の間の数値は代数的に低い値に丸められる。例えば

nlowmult(10, 44)    =  40
nlowmult(10, 46)    =  40
nlowmult(25, 328)   = 325
nlowmult(.1, 4.567) =   4.5
nlowmult(10, -41)   = -50

nhimult TARGET, LIST

 LIST で指定された数値より大きい最小の TARGET の倍数を返す。
 TARGET は正でなければならない。
 スカラーに対しては単一の値を返す。リストに対しては値のリストを返す。
 2つの倍数の間の数値は代数的に高い値に丸められる。例えば

nhimult(10, 44)    =  50
nhimult(10, 46)    =  50
nhimult(25, 328)   = 350
nhimult(.1, 4.512) =   4.6
nhimult(10, -49)   = -40

浮動小数点の問題

 浮動小数点は、もちろん、実数の有理数の部分集合であり、それゆえに計算が常に正確とは限らない。この問題を回避するためにこれらのルーチンでは 1/2 に対して 0.5 より微妙に大きい値を与えている。
しかしながら丸められた数値は浮動小数点として格納され、その精度は通常通りハードウェアか C コンパイラなどに依存する。このように 1/2 の数値をわずかに大きい値で格納することは驚くべきことではない。


著者

 Math::Round は2000年10月に Geoffrey Rommel <GROMMEL@cpan.org> によって書かれた。

Toolbox Logo
Updated : 2006/11/14