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

名称

 Math::SigFigs - 有効数字を保持して計算


概要

 CountSigFigs 及び FormatSigFigs を使うだけなら最初の形式を用いよ。計算を行うなら2行目の形式を用いよ。

use Math::SigFigs;
use Math::SigFigs qw(:all);

 以下のルーチンはカウントやフォーマットのみを行う。

$n=CountSigFigs($num);
$num=FormatSigFigs($num,$n);

 以下のルーチンは計算を行う。

$num=addSF($n1,$n2);
$num=subSF($n1,$n2);
$num=multSF($n1,$n2);
$num=divSF($n1,$n2);

説明

 多くの科学的アプリケーションでは所与の有効数字を保持したまま表示したり計算に扱えることは有用である。
 有効数字に関する規則は sprintf 関数で処理するには(Randal Schwartz でない限り :-)複雑するぎる。
 これらのルーチンにより正しく有効数字を扱うことができる。
 有効数字の桁数を数え、所与の桁数の有効数字で表示し、計算を行うことができる。


ルーチン

CountSigFigs

$n=CountSigFigs($N);

 有効数字の桁数を数値で返す。$N が数値で泣ければ ( ) を返す。

  $N      $n
  -----   --
  240     2
  240.    3
  241     3
  0240    2
  0.03    1
  0       0
  0.0     0

FormatSigFigs

$str=FormatSigFigs($N,$n)

 $n 桁の有効数字で $N を表示する文字列を返す。有効数字が3桁の 2400 のような数字以外は正しく機能する。

  $N     $n   $str
  ------ --   -------
  2400    1   2000
  2400    2   2400
  2400    3   2400
  2400    4   2400.
  2400    5   2400.0

  141     3   141.
  141     2   140

  0.039   1   0.04
  0.039   2   0.039

  9.9     1   10
  9.9     2   9.9
  9.9     3   9.90

addSF, subSF, multSF, divSF

 有効数字の桁数を保持したままで2つの数値の四則演算を行う。


既知の問題

科学的記数法でないので一意に定まらない場合がある。

 これらのルーチンは科学的記数法(指数を用いた表記)を用いることができないので、結果としていくつかの数値で一意に定まらない場合が生じる。例えば

$str=FormatSigFigs("2400",3);

は有効数字が3桁でない "2400" という文字列を返す。これはバグではない。科学的記数法を用いない場合に有効数字を扱う際の基本的な問題である。

Mac で printf ライブラリを呼び出す際のバグ

 テストの1つとして

FormatSigFigs(0.99,1)  =>  1.

を行うと、いくつかの Mac OS バージョンでは落ちることがある。"1." の代わりに "0." を与え、呼び出すときに

printf("%.0f","0.99")

とすると、 1 の代わりに 0 を返す。これについては何も追加するつもりはない。


著者

 Sullivan Beck, (sbeck@cpan.org)

Toolbox Logo
Updated : 2007/05/06