ひょんなことから12の82乗なんていうとんでもない計算をすることになったのですが、結果は10の82乗よりも大きいわけで、83桁以上なことは確実。64ビット浮動小数点 を越える計算、さてどうしたものかと思ったらこの手の計算は複数の言語でサポートされているらしい。
PerlではMath::BigIntクラスがそれにあたり、Perl 5.8からは標準で含まれる。それ以前のPerlでもCPANでインストール可能でcpan -i Math::BigIntでOK。で、以下のスクリプトを組んでめでたく89桁の結果を得ました。
bash-2.04$ cat test.pl #!/usr/bin/perl use Math::BigInt; $x = Math::BigInt->new("12"); $x = $x ** 82; print $x->bsstr()."¥n"; bash-2.04$ ./test.pl 31107289852948419532830210325169922767038593747425104848349825951609481990716300348882944e+0
玄箱 で1秒足らずで出力されましたが、もっと桁数の大きい計算を繰り返すには遅すぎるのでGMP とそれに対応するPerlライブラリMath::BigInt::GMPを使用すれば速くなるとのこと。小数を含む計算にはMath::BigFloat。
こういうこと経験すると、計算機って便利だなと思う次第。
[参考]
Comments