作者: 藤岡和夫
日時: 2005/10/08(21:59)
On Sat, 08 Oct 2005 21:41:07 +0900
藤岡和夫 <kazuf@...> さんwrote:

>  こんな具合になって動いています。
> 
>  結果としては、use bignumでは合計$bは1になっているように見えるのだけど、
> なぜか、$bを1と比較するとNGになる場合がある。use bignumを使わない場合に
> は、比較の結果通り、$bが1になっていない場合だけ、NGになっている。小数点
> 以下を30桁まで表示させても同じでした。

 use bignum使用下で、print文で合計を表示させてみるとNGの場合は1になって
いませんでした。小数点以下40桁(^^;)の表示なっています。

@nums = (1,2,3,4,5,6,7,8,9,10);
foreach $n (@nums){
    $b += 1/$n foreach(1..$n);
    print $n,":",$b,"\n";
    if($b == 1){
        $eq = "OK";
    }else{
        $eq = "NG";
    }
    printf "\$n = %f -> %s 1/\$n = %.20f \$b = %.20f \n", $n, $eq, 1/$n, $b;
    $b = 0;
}

C:\Scripts\Perl>perl -Mbignum TMm3.pl
1:1
$n = 1.000000 -> OK 1/$n = 1.00000000000000000000 $b = 1.00000000000000000000
2:1
$n = 2.000000 -> OK 1/$n = 0.50000000000000000000 $b = 1.00000000000000000000
3:0.9999999999999999999999999999999999999999
$n = 3.000000 -> NG 1/$n = 0.33333333333333331000 $b = 1.00000000000000000000
4:1
$n = 4.000000 -> OK 1/$n = 0.25000000000000000000 $b = 1.00000000000000000000
5:1
$n = 5.000000 -> OK 1/$n = 0.20000000000000001000 $b = 1.00000000000000000000
6:1.0000000000000000000000000000000000000002
$n = 6.000000 -> NG 1/$n = 0.16666666666666669000 $b = 1.00000000000000000000
7:1.0000000000000000000000000000000000000003
$n = 7.000000 -> NG 1/$n = 0.14285714285714285000 $b = 1.00000000000000000000
8:1
$n = 8.000000 -> OK 1/$n = 0.12500000000000000000 $b = 1.00000000000000000000
9:0.9999999999999999999999999999999999999999
$n = 9.000000 -> NG 1/$n = 0.11111111111111112000 $b = 1.00000000000000000000
10:1
$n = 10.000000 -> OK 1/$n = 0.10000000000000001000 $b = 1.00000000000000000000

藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/