桁数の大きい計算

ひょんなことから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]

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

     

[X] [Top ↑]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.5162 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