桁数の大きい計算

ひょんなことから12の82乗なんていうとんでもない計算をすることになったのですが、結果は10の82乗よりも大きいわけで、83桁以上なことは確実。64ビット浮動小数点Link を越える計算、さてどうしたものかと思ったらこの手の計算は複数の言語でサポートされているらしい。

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

玄箱Link で1秒足らずで出力されましたが、もっと桁数の大きい計算を繰り返すには遅すぎるのでGMPLink とそれに対応するPerlライブラリMath::BigInt::GMPを使用すれば速くなるとのこと。小数を含む計算にはMath::BigFloat。

こういうこと経験すると、計算機って便利だなと思う次第。

[参考]

— posted by mu at 03:48 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0097 sec.
prev
2008.4
next
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30