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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- 経済学 「政府支出乗算」の求め方を教えてください。 2 2022/11/20 19:52
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
O(n log n)について2
-
EXCELの関数"STDEV(標準偏差)"...
-
c languageで 簡単な質問があ...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
VB.net Double と...
-
時刻の比較
-
16進数 加算 減算 C言語
-
VB6のFIX関数での誤差について
-
三菱シーケンサ(Aシリーズ)で...
-
C#にて電卓を作りたいのですが...
-
ExcelでPC(パソコン)によって...
-
Double型について
-
VB6.0での小数点の扱いについて
-
ハッシュ関数
-
floatの有効桁数
-
どんな数字を入力してもaverage...
-
16進数とかわからないです
-
有効数字について 以前質問をし...
-
桁落ちのプログラムで真の値と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
”/”を使わずに割り算したいんで...
-
有効数字について 以前質問をし...
-
三角比の俯角の計算
-
ExcelのINT関数の計算結果がお...
-
VB.net Double と...
-
floatの有効桁数
-
パソコンで階乗を計算
-
三菱シーケンサ(Aシリーズ)で...
-
除算を使わずに10で割りたい。
-
VB6.0での小数点の扱いについて
-
EXCELの関数"STDEV(標準偏差)"...
-
時刻の比較
-
VBAでの割り算の余りの求め方
-
計算の丸め誤差の解消について
-
C言語プログラミングにて、arct...
-
VBAでミリ秒まで出力する方法
おすすめ情報