• ベストアンサー

大量な小数点について

今回自作で、簡単なベンチマークテストをするために 何千という円周率を求めるプログラムをC言語で作成しようと思っています。 円周率を求めるプログラムは、簡単なストーマーの公式を用いて行おうと思っています。アルゴリズムは理解できているのですが、大量の小数点をC言語でどのように表現しようか考えているとこですが、思いつきません。 どなたか、何千という小数点を扱う方法の伝授をお願いします。

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

  • ベストアンサー
  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

FMT で検索するとπの計算ソフトが見つかります。 下のURLには何千と言う桁数の計算方法が書いてあります。 また、 RSAの本で橋本晋之介さんの書かれた本にも 多倍長整数の計算のサンプルがあります。 他にも多倍長の数値の計算を説明した本はあります。 あとは、検索して本を買って下さい。

参考URL:
http://www.dept.edu.waseda.ac.jp/math/ushiro/ushiro/program/pi.htm

その他の回答 (2)

noname#74310
noname#74310
回答No.2

配列かメモリへのポインタを使用。 16bit CPUなら0x2710(=10000)で4桁毎に計算。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

super_piというソフトがあります。 それを利用するのが簡単かも。 多倍長計算の方法は、探せば色々とあるでしょうけど、 例えば、byteやintの配列で表すことにすると、 10進数で一桁が9まで表せて10で繰り上がるように byteの場合1つで、255まであらわせて、256で繰り上がる 256進数として計算できます。 表示のしやすさから1バイトで、10進一桁にするもよし、また、2桁にするもよし。 小数点の扱いについては、適当な位置で固定小数点として扱えば、整数として扱えます。 浮動小数点として扱う場合は、浮動小数点位置を表すデータを別にとって、(構造体とかでペアにするとかして)計算するときは、位置を揃えて計算します。

関連するQ&A

  • 長い桁(小数点以下)が計算できる言語は?

    先日、円周率を求める独自のアルゴリズムで、(仮称)十進BASICを使用して1000桁まで出すことに成功しました。 しかし、(仮称)十進BASICは1000桁が限界で、これ以上詳しい値を出すことが出来ませんでした。 なので、さらに詳しい値を算出できるプログラミング言語には何があるのでしょうか? 検索してみると、独自の計算のプログラムなどを組まなければいけないとか・・・ 無限桁の桁数が扱えるプログラミング言語はないでしょうか? また、計算用のプログラムを組むとなれば、どの言語がおすすめですか? 是非教えてください。

  • 『浮動小数点』について

    最近、ふと『浮動小数点』について疑問を持ちました。 それは『浮動小数点』がどんな場合に役立つのか?という事です。 C言語では標準で『float』型と『double』型がありますよね。 私は昔、C言語を始めたころにテスト・プログラムなどで使った経験しかなく その後に『電卓ソフト』を作ろうとしたときに『誤差』が原因で役に立たない ことを知りました。『誤差』があることは知っていましたが…。 そこで質問。内容は『浮動小数点』はどんな場面で利用されているかです。 実際の『ソフトウェア開発』や趣味でフリーソフトを作った場合も含み、あと こんな場面で役に立つのではという事を知りたいのです。 アンケートみたいになりますが、『アンケート』カテゴリでは、あまり回答などが 集まらないと思い『C/C++』カテゴリのこちらで質問としました。 よろしくお願いします。

  • 浮動小数点の小数点3桁を。。。

    宜しくお願いします。C言語を使い三角関数の計算を行っております。小数点3位以下は四捨五入にしたいのですが、そのような関数が有りますでしょうか? 環境はQuickC(MSDOS)です。 もしなければ文字列にでも変換し直して行うのでしょうか?一般的な方法など御在ましたらお教え下さい。 宜しくお願いします。

  • 小数桁表示ができません

    最近javaプログラムを始めたものです。いま円周率πの計算をしているのですが、どうしたら小数桁を15桁以上の値を表示することができますか?よろしくお願いします。

  • 小数点にカンマを使う理由

     小数点にピリオド(.)ではなくカンマ(,)を使うかたが、このサイトで複数見受けられますが、どういった理由なのでしょうか。 (a) 小数点をカンマで表記する言語圏で教育を受けた。 (b) 入力環境の都合で、ピリオドは入力しにくい。 (c) その他。  また、「{3.14, 2.78, 1.41}」 などはどのように表記されるのでしょうか。

  • 円周(率)の計算方法

    文系人間です。 高校の数学は、計算問題は解けるけど…といったレベルでした。 円周率は、「円周÷直径」と習いました。 しかし、実生活において円周や直径を実測しようと思ったら、 定規や巻き尺を使ってせいぜい10分の1ミリまでが限界です。 それで正確な(小数点以下何兆ケタの)円周率が算出できるとは思えません。 ということは円周も計算式で求めなければならないということです。 で、円周は、「直径×円周率」…これでは堂々巡りですね。 円周を円周率を使わずに求める方法ってあるんでしょうか。 ある値の近似値ってその値そのものですか? 小数点以下何兆ケタの円周率を算出する公式は調べれば出てくると思いますが、 その公式が意味するところは、一般人にも分かるように説明できるのでしょうか。 また、そのような公式は、円周と関係あるのでしょうか、ないのでしょうか。 円周と関係ないとしたら、どうして定義から離れたところで、円周率が算出できるのでしょうか。 円周率に対するもやもやした気持ちを言葉にすること自体が難しいのですが、 あえて質問にするとしたらこんな形です。 推察するに聞きたいことはそうじゃないだろ、というご意見でも結構です。 よろしくお願いいたします。

  • Javaと他言語比較について

    Javaとその他の言語(例えばC/C++、VisualBasic、SmallTalk ObjectPascalなど)と比較をしてみたいと思うのですが。 ①数値計算機能比較(整数の計算、関数の計算、浮動小数点演算、円周率計算) ②通信速度比較(クライアントサーバプログラム)...C++のみです。 などのベンチマーク比較を考えておりますが。その他に有効な比較内容は有りますか? そして、上の①②でのテストでの注意事項(実行環境など)などがありましたらアドバイス お願いします。

  • VAX浮動小数点形式

    NASAのホームページからダウンロードしてきたデータを画像化しようとしているのですが、そのデータの型の説明のところにVAX_REALと書いてあり、いろいろ調べた結果VAX浮動小数点形式というのがあるらしいということまでは分かったのですが、具体的にVAX浮動小数点形式がどういうものなのか分かりません。 IEEE浮動小数点形式とは違うものなのでしょうか? あと、VAX浮動小数点形式というのはC言語などでふつうに読み出せるものなのでしょうか? どなたか分かる方教えてください。

  • FFTで小数点以下のsin周波数を検出することはできるのでしょうか?

    FFTで小数点以下のsin周波数を検出することはできるのでしょうか? 私はFFTどころか「フーリエの冒険」を読んででやっとDFTがなんたるかを理解できた人間なんですが、 今どうしてもC言語のFFTのプログラムを必要としています。 で、今の私ではFFTのプログラムを作ることはできないと思ったので インターネットからプログラムをコピーして使用していたのですが、 私が調べた限りだと小数点以下のsin周波数を正常に検出できるようなFFTのプログラムはみつかりませんでした。 ですので、詳しい人がいたら小数点以下のプログラムがあるところを教えてください。お願いします。 あと気になる点があるのですが、 http://mak-oto.cocolog-nifty.com/blog/2009/10/post-84b1.html ↑のURL先の記事を読んで、小数点以下の周波数をどう検出したらいいのかよく分からなくなりました。 そこについての補足もできればよろしくお願いします。

  • C言語で円周率を求めるプログラムを作りたいのですがわかりません。

    C言語で円周率を求めるプログラムを作りたいのですがわかりません。 どなたか教えていただけないでしょうか。

専門家に質問してみよう