C言語でπの値を2万桁まで(2万という数字に特に意味はないですが大きい桁)をマーチンの公式を用いて計算したいのです。
マーチンの公式によるπの求め方は
16×アークタンジェント(1/5) - 4×アークタンジェント(1/239)
ということは分かったのですが
double型の変数を使っても扱える桁数はたかがしれているので
どのようにすればアークタンジェント(1/5)などの値を
C言語のプログラムで大きい桁まで求めることができるのでしょうか。
また何かうまい具合に計算できるアルゴリズムなどがありましたら
教えてください。
詳しい方いましたら、よろしくお願いします。
もしよければ参考プログラムなども
貼り付けていただけたら幸いです。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
以下のURLに計算機向きのπの公式で、「円周率πを16進数で表したときの、小数第d位以下の(何桁かの?)桁の数字」を求める方法の解説がありました。
「3兆桁程度であれば、値を格納するのに64ビットのメモリがあれば十分だそうです」らしいです。πの10進数表示の桁の数字を求めるのは、さらに工夫が必要だと思いますが^^http://www.riverplus.net/sci/2005/05/post_83.html
No.3
- 回答日時:
(No2さん同様なつかしい)
>マーチンの公式によるπの求め方は
>16×アークタンジェント(1/5) - 4×アークタンジェント(1/239)
>ということは分かったのですが
これだけですと一発で終わってしまう=「1変数の精度の桁まで」しか求まらない、では、どうしたらよいかがご質問の主旨として投稿します。
ネットで検索すると参考URLが出てきました(なんと「グレゴリー級数」は「収束が極めて遅く、数値計算にはまったく向いてはおりません」と・・・えっ?)。
私は、BLUE BACKS「パソコンで挑む円周率」(1991大野栄一)等を参考にしました。
★私の方法は、「マチンの公式をグレゴリー級数で表現し・・」、平たく言うと、マチンの公式を一発で終わらない式に変換(割り算式のΣ)する。その計算は、「商」を処理系の有効桁(大事を取ってその半分n=速度とのかねあい)ずつ蓄積しつつ、順次「余り」をπの必要桁数(/n)まで割っていくというものです。
☆「質問の主旨はこうだろう」という仮定の上での投稿で恐縮ですが、当時のソースをみたところ math.h はインクルードされていませんでした。割り算のみ・・・。
☆最新95年作のものをコンパイルしたところ、2037桁までを1秒かかりませんでした(ENIAC2037桁70時間)。
参考URL:http://www.kurims.kyoto-u.ac.jp/~ooura/pi04.pdf
> ★私の方法は、「マチンの公式をグレゴリー級数で表現し・・」、平たく言うと、マチンの公式を一発で終わらない式に変換(割り算式のΣ)する。その計算は、「商」を処理系の有効桁(大事を取ってその半分n=速度とのかねあい)ずつ蓄積しつつ、順次「余り」をπの必要桁数(/n)まで割っていくというものです。
なかなか難しいです。頭のキャパシティが足りないもので。笑
がんばってプログラム作りたいと思います。
アドバイスありがとうございました
No.2
- 回答日時:
ご参考:
計算機向きのπの公式なんかもありますよ。
http://www.pluto.ai.kyutech.ac.jp/plt/matumoto/p …
あと、こちらに、
http://www.tensyo.com/urame/prog/piHex.htm
「多倍長計算を使わずに、円周率πを多桁求めます」ってのがありました。
それにしても、なつかしい。。マチンの公式^^ 『解析概論』に載っていたのを読んで、感動した記憶がある^^
僕も時間が経つとこのマーチンの公式が
なつかしいなぁと思えるようになるのかなぁ。
参考URLありがとうございます。
早速調べてみます。
No.1
- 回答日時:
★アドバイス
>C言語のプログラムで大きい桁まで求めることができるのでしょうか。
↑
こいうのは多倍長演算を行います。
・この多倍長を自分で実装するのはちょっと面倒なのでフリーのライブラリなどを
利用すれば簡単に行えると思います。
次のリンクを参考にして下さい。
http://oshiete1.goo.ne.jp/qa3229976.html→『ULONGLONGよりも大きい整数を扱う』
↑
回答 No.4 を参考にして下さい。
・以上。
参考URL:http://oshiete1.goo.ne.jp/qa3229976.html
お早い回答ありがとうございます。
まさにその多倍長演算とやらをする方法がわからなかったので
参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
O(n log n)について2
-
2進数の足し算(C言語)
-
c languageで 簡単な質問があ...
-
EXCELで 0.1 はなぜ 0.1 となる...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
ExcelのINT関数の計算結果がお...
-
乱数 なぜ剰余を使うのか
-
VB6.0での小数点の扱いについて
-
パソコンで階乗を計算
-
三角比の俯角の計算
-
C言語プログラミングにて、arct...
-
高精度乱数関数
-
除算を使わずに10で割りたい。
-
教えて小数点の比較!(C言語)
-
”/”を使わずに割り算したいんで...
-
エクセルの多い桁数を表示させ...
-
VBAでミリ秒まで出力する方法
-
色の判定
-
16進数 加算 減算 C言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
有効数字について 以前質問をし...
-
ExcelのINT関数の計算結果がお...
-
除算を使わずに10で割りたい。
-
VB.net Double と...
-
2進数の足し算(C言語)
-
ExcelでPC(パソコン)によって...
-
三菱シーケンサ(Aシリーズ)で...
-
EXCELの関数"STDEV(標準偏差)"...
-
”/”を使わずに割り算したいんで...
-
floatの有効桁数
-
VBAでミリ秒まで出力する方法
-
コンピューターは指数関数をど...
-
距離から緯度経度を求める方法
-
VB6.0での小数点の扱いについて
-
時刻の比較
-
どんな数字を入力してもaverage...
-
powf を使わずにべき乗を計算
おすすめ情報