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

名称

 Math::FixedPrecision - 浮動小数点誤差なしの10進数計算


概要

use Math::FixedPrecision;

$height  = Math::FixedPrecision->new(12.362);   # 小数点第3位まで
$width   = Math::FixedPrecision->new(9.65);     # 小数点第2位まで
$area    = $height * $width;                    # area の値は 119.2933 ではなくて 119.29
$length  = Math::FixedPrecision->new("100.00"); # 小数点第2位まで
$section = $length / 9;                         # section の値は 11.1111111...  ではなくて 11.11

説明

 整数だけで構成されているわけではないデータにとって、浮動小数点が適していないインスタンスが数多くある。本モジュールでは数学的処理の間、桁数を自動的に維持するために Math::BigFloat の機能を利用している。
 これは全ての操作において Math::BigFloat を内部で処理するため便利なモジュールである。本モジュールで Math::BigFloat のいくつかの属性を設定することであらゆることができる。new() を呼び出す時点で小数点以下の桁数を指定しておくだけで、それ以降の計算で桁数が保持されるので極めて作業を簡略化できる。

 本モジュールを使うか Math::BigFloat を使うか決めかねているのなら、以下のように考えると良い。本モジュールを使えば、データは完全に正しいとは言えないかも知れないが、計算結果を膨らませることはない。 Math::BigFloat では精度は正しいが意図しない桁あふれにあうかも知れない。

new( number [,precision] )

 コンストラクタは数値または数値のように見える文字列を受け付ける。
 ただし特定の桁数を指定したければ第2引数で正確に指定しなければならない。つまり、以下の変数は全て異なる桁数を保持することになる。

$var1 = Math::FixedPrecision->new(10);
        # 無限桁なので 10
$var2 = Math::FixedPrecision->new(10,2);
        # 小数点第2位までなので 10.00
$var3 = Math::FixedPrecision->new("10.000");
        # 小数点第3位までなので 10.000

 すべての計算はデータの中で最小の桁数に丸められる。(上記 $var1 のように)整数に見える数値は無限の桁数を保持する(小数点以下なし)。This is important to note since Perl が幸運にも 10.000 のような数値から後続の 0 を打ち切り、10の後ろに0をいくつも打つ必要がないため、重要なことである。特定の桁数にしたければ $var2 のように明示的に桁数を指定するか、$var3 のように引用符で囲むかのどちらかをする必要がある。例えば

$var4 = $var3 * 2; # 小数点第3位までなので 20.000
$var5 = Math::FixedPrecision->new("2.00");
        # 小数点第2位までなので 2.00
$var6 = $var3 * $var 5;
        # 小数点第3位までではなく第2位までなので  20.00

EXPORT

 デフォルトではなし。


著者

 John Peacock, <jpeacock@rowman.com>


参考資料

 Math::BigFloat

Toolbox Logo
Updated : 2006/11/23