作者: dune
日時: 2005/10/12(22:32)
Bruce.さんの[TSperl:616] bignumから
>bignumは適宜 Math::BigInt と Math::BigFloat を使い分けているようですよ。
>
>C:\Perl\lib>perl -Mbignum -e "$foo = 1; print ref($foo)"
>Math::BigInt
>C:\Perl\lib>perl -Mbignum -e "$foo = 0.1*10; print ref($foo)"
>Math::BigFloat
>
>となります。

0.1 と書いたところで量子化誤差が発生するので、それに 10 をかけた
1 にも量子化誤差が含まれていて、それを $foo に代入しようとすると
Math::BigFloat が呼ばれるのではと推測してたのですが、量子化誤差が
ないはずの 0.5 で試しても変わらず Math::BigFloat が呼ばれてしまう。
う〜む。

D:$ perl -Mbignum=p,-4 -e "$x = 0.5*10; print ref($x)"
Math::BigFloat
D:$

他には

D:$ perl -Mbignum=p,-4 -e "$x = 1+1; print ref($x)"
Math::BigInt
D:$ perl -Mbignum=p,-4 -e "$x = 1-1; print ref($x)"
Math::BigInt
D:$ perl -Mbignum=p,-4 -e "$x = 1*1; print ref($x)"
Math::BigInt
D:$ perl -Mbignum=p,-4 -e "$x = 1/1; print ref($x)"
Math::BigFloat
D:$

となる。割り算の結果は必ず Math::BigFloat らしい。

浮動小数点の精度をあげるのではなく、固定小数点型を使って量子化誤差
フリーな計算がしたいだけなのだけど。
--