• ベストアンサー

Perlの数値計算で有効桁数を上げたい

通常、Perlで数値計算をする場合、有効桁数は15~16桁になってしまいます。 これを、32桁、64桁と精度を上げて計算する方法はないでしょうか。 現在の環境は、Perl 5.8です。 よろしくお願いいたします。

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

perl -MMath::BigFloat -e "print $Math::BigFloat::VERSION" をコマンドラインから実行してみてそのバージョンが1.58(現時点での最新) かどうかを確認し、最新であれば >perl -MMath::BigFloat -e "print $Math::BigFloat::VERSION" 1.58 perl -MMath::BigFloat -e "my $x = Math::BigFloat->new(2); print $x->bsin(100);" 0.909297426825681695396019865911744842702254971447890268378973011530967301540783 5446201266889249593803 のように、Math::BigFloatクラスのメソッドが使えます。 最新のものでなければ、Windows 以外のOSなら cpan コマンドを、WindowsでActivePerlを使っているなら、 ppm コマンドを使って最新のものに更新してください。 このとき指定するのは Math::BigIntモジュールなのに注意してください。 >ppm-shell ppm 4.01 Copyright (C) 2007 ActiveState Software Inc. All rights reserved. ppm> search math-bigint 1: Math-BigInt v1.64 2: Math-BigInt v1.87 3: Math-BigInt v1.79 4: Math-BigInt-BitVect v1.11 5: Math-BigInt-Constant v1.04 6: Math-BigInt-FastCalc v0.15 7: Math-BigInt-FastCalc v0.10 8: Math-BigInt-GMP v1.24 9: Math-BigInt-GMP v1.19 10: Math-BigInt-Named v0.03 11: Math-BigInt-Pari v1.13 12: Math-BigInt-Random v0.03 13: Math-BigIntFast v6.0 ppm> install 2 Downloading Math-BigInt-1.87...done Downloading Test-Simple-0.70...done Unpacking Math-BigInt-1.87...done Unpacking Test-Simple-0.70...done Generating HTML for Math-BigInt-1.87...done Generating HTML for Test-Simple-0.70...done Updating files in site area...done 10 files installed 6 files updated ppm> quit

Zeal250
質問者

お礼

ありがとうございます。無事、実行できました。

その他の回答 (2)

回答No.3

どなたも回答されていないようなので・・・・。 Perlで有効桁数を上げて計算をするには、BigIntやBigFloatを使用します。 Zeal250さんが整数の演算を行いたいのか浮動小数点の演算で有効桁数を上げたいのかはわかりませんが、例として、整数演算の有効桁数を上げたいとすると、下記のようになります。 use Math::BigInt; $big = Math::BigInt->new("1.23456789e+200"); $big *= $big; print $big; なお、お使いのPerlのバージョンが5.8であれば、 use biginit; $big = 1.23456789e+200; $big *= $big; print $big; としても、計算ができます。 Perl5.8以降では、Math::BigIntモジュールのラッパーがbiginitモジュールとして実装されているようです。 お試しください。

Zeal250
質問者

お礼

ありがとうございます。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

use bignum; パラメータ等はperldoc bignum で。 携帯端末からなのでとりあえずこれだけ。 ただ、好きなだけ精度をあげられる代わりに遅いです。

Zeal250
質問者

補足

ありがとうございます。 よろしければもう一点確認させて下さい。 "use bignum"を宣言した状態で、三角関数演算(sin)を使用すると エラーストップしてしまいます。 コード: use bignum; sin(2); エラーメッセージ: "Operation 'sin':no method found, argument in overloaded package Math::BigInt at test.pl line 2" "use bignum"を使わなければ、このエラーメッセージは発生しません。 use Math::BigInt記述していてもいなくても結果は変わりません。 bignumを使いつつ(有効桁数を上げつつ)、三角関数を計算できる方法 がありましたら教えて頂けないでしょうか。 よろしくお願いいたします。

関連するQ&A

  • 有効桁数とはなんですか?

    小学生でもわかるように単純に説明してくだされば幸いです。 ちなみに、僕は、「精度として、確実性のある(信用できる)桁数」だと思っています。合ってますか? 例えば、123.43の場合、有効桁数4なら、「123.4」が精度として確実性のある桁数で、それ以後の桁は確実性のある(信用できる)数値ではなく、誤差が含まれてる可能性がある。つまり、123.43の3は誤差があると考えていい。 また、有効桁数と有効数字の違いはなんですか?

  • 円周率の大桁数の計算

    円周率 3.1415~延々と続きますが、この莫大な桁の数字はどうやって計算するのでしょうか? ・計算機ならではの特別なアルゴリズムがあるのか? ・手計算で無理やり算出する方法はあるのか? 正多角形を内接、外接させる方法は桁数が小さい場合に有効ですが、何十桁も求めるには不向きと思います。世に出ている数値はどうやって計算したのでしょうか?素人考えですが、今日は40~50桁数、明日は51~60桁などという方法があるのでしょうか?

  • VB5での有効桁数以上の計算結果について。

    現在、VB5をやっているのですが、以前の質問のログを見てさらに思ったのですが、乗除算で Double型で15桁や通貨型などで、有効桁数より大きな数(20桁)等を計算して、正しい数値を 表すには(指数ではなくて)何かいい方法があるのですか? 999,999,999,999,999 * 10 などの計算です。

  • 有効桁数について

    レポートで有効桁数というものが出てきたんですが良く分かりません。つまりは有効桁数というのは、 「1.5-0.15=1.3」というので、小数点以下の計算の場合、結果は精度が低いほうの桁で応えるというものですよね??(汗) 聞きたいのは単位を「mm」から「m」に直したときの有効桁数のことなんですが、 例えば「100.5mm-10.3mm=90.2mm」じゃないですか? これを[m]に直したときの有効桁数は、 「0.0902m」なんですか? それとも「0.09m」なんでしょうか? 良く分からないのでよろしくおねがいします。

  • 有効桁数について

    たとえば整数の3桁割る4桁の場合の数値についてです。 レポートの表に数値を記入するとき,たとえば0.921,0.866,0.995,1.331と計算結果が続くとき 小数点以下の桁数を同じにしてはダメですか? やはり1.331は1.33と記入しないとダメなのでしょうか?私は小数点以下の桁数をそろえて記入したところその理由を問われたのですが,答えられませんでした.小数点以下の桁数をそをえてもいい時のわけを教えてください.   大変困ってます!!!

  • 桁数の計算

    はじめまして。 掛け算・割り算の桁数だけ計算する時、自分は以下のように計算しています。 しかし、自分だけ独自の計算方法をしているように思えて気になっていました。 皆さんはどのようにしておられるのか教えてください。 よろしくお願い致します。 掛け算の場合 100(3ケタ)× 100(3ケタ) = 10000(5ケタ) → 3ケタ + 3ケタ - 1ケタ = 5ケタ 割り算の場合 10000(5ケタ) ÷ 100(3ケタ) = 100(3ケタ) → 5ケタ - 3ケタ + 1ケタ = 3ケタ 10000(5ケタ) ÷ 10000(5ケタ) = 1(1ケタ) → 5ケタ - 5ケタ + 1ケタ = 1ケタ 10000(5ケタ) ÷ 1000000(7ケタ) = 0.01(3ケタ) → 7ケタ - 5ケタ + 1ケタ = 3ケタ *ケタの大きいほうから小さいほうを引くように変換(計算結果がプラスになるように変換)

  • 有効桁数について

    ある数値を5回測定したとします A 5.039 B 5.075 C 5.092 D 5.064 E 5.058 有効桁数はすべて4桁ですよね? 次にA~Eの平均を取ると (A+B+C+D+E)/5=5.0656 と関数電卓で結果がでますが、4桁に丸めて5.066とすれば有効桁数の扱い方としては問題ないですか? そしてA~Eの平均の2乗をするときは、上記の平均を有効桁数4桁に丸めた5.066を2乗して (5.066)^2=25.664356 となり、そして5.066の有効桁数4桁に合わして25.66とすればいいのでしょうか? それとも平均の値を4桁に丸める前の電卓で出た値のまま2乗した後、最終的に4桁に丸めるのがいいのでしょうか?この数値だとどちらでやっても4桁にした値は変わりませんが・・・ 有効桁数の扱い方で問題があったら教えてください、また平均の2乗を求めるときはどちらが正しいのでしょうか? (平均の値の2乗は平均×平均なのだから平均の値を4桁にせず5桁として計算すると平均の2乗は有効桁数5桁と考えるので、やはり正しく平均の値を測定値の有効桁数4桁に丸めて出した平均の値を2乗する方が正しいですかね・・・)    また、上記の平均の計算をしたときのよな、「5」などの数字の有効桁数は何桁ですか?1桁なんでしょうか?もし1桁なら割り算をしているので有効桁数はいちばん桁数の少ないものに合わせるので有効桁数1となると平均の値が「5」となりおかしいとおもうんですが・・・ 上記の平均を取ったときの「5」や、測定回数の数値や、測定していない数で100で割れと書いてあったりしたときは、それらの数字の桁数も考えなければならないんでしょうか? 読みづらい文章かもしれませんが、ご回答待っています。

  • エクセルで桁数の分からない数値を右から1数値ずつ抜き出したい

    エクセルで教えて下さい!! 桁数の分からない数値があります。 12345を他のセルに1数値づつ抜き出したい。 桁数が分かっていれば簡単なのですが… 桁数が分からない為その12345が入っていたセルには123456と6桁入る場合もあります。 RIGHTなら右から2文字とか3文字とか抜き出しますが…1つのセルに1つの数字を抜き出したいのです。 RIGHTなら1番右1文字は抜き出せても12345が入っている場合、2番目の4の数値を1文字だけ抜き出す事って不可能ですよね。(45を1つのセルに抜き出す事になります) 説明下手で申し訳ないですが(~_~;)分かれば教えて下さい宜しくお願いします!!ヽ(^o^)丿

  • 桁数の多い計算がしたい

    エクセルで桁数の多い(30桁、小数点も20桁以上)計算ををしたいのですが、どこか設定を変えれば可能でしょうか。 困っています、よろしくお願いします。

  • 計算に使うエクセルの数値の表し方について

    初歩的な質問かもしれませんが… エクセルのセル間で、計算式や関数を使って計算を行うと、答えが6.10479547238…などと割り切れない小数になることが多いです。 これを、例えば小数点以下3桁で表示させるには、書式の表示形式を数値にして桁数を3で指定する方法と、ROUND関数を用いて引数を3にするやり方が考えられます。 この計算結果の数値を用いて、さらに別の計算を行う場合(例えば各計算結果の平均値を出すなど)、どちらのやり方で丸めたものを用いた方が正確でしょうか?

専門家に質問してみよう