作者: 藤岡和夫
日時: 2005/10/09(00:00)
On Sat, 08 Oct 2005 23:33:38 +0900
"Bruce." <kbk@...> さんwrote:

> さすがに printf は bignum を use してもオーバーライドされていないのでは?
> 
> といってもデフォルトの精度で文字列化したものを出力しているとも
> 思えないから、BigFloat→double→printfで出力?
> 
> で、結果に関してはあくまでも有限精度でやっている以上、無限小数や
> 循環小数が商で現れると打切り誤差が発生していると思うのですが。
> 打切り誤差が一回出たものをどういじっても誤差は残ったままと。

    printf "\$n = %f -> %s 1/\$n = %.40f \$b = %.40f \n", $n, $eq, 1/$n, $b;

として、小数点以下40桁で表示させても、print出力とは異なり、1.00…000でし
た。

 結局、Perlクックブックのレシピ2.3「浮動小数点数を比較する」では、
sprintfを使って、ある桁数に丸めて比較するということになります。通常のコ
ンピュータハードウェアでは、15桁程度の精度しかないので、それ以上の桁数で
比較しても意味がないということらしい(なぜだろう?)。

 桁数を指定して丸めて特定の数値と比較するequal関数というのもある。

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