C言語関係掲示板

過去ログ

No.587.巨大な数を扱うには?

[戻る] [ホームページ]
No.5564

素朴な質問・・巨大な数を扱うには?
投稿者---Taro(2003/03/12 08:59:18)


 C言語では43億以上の数を扱うとオーバーフローになる可能性があると理解したのですが、それ以上の数は計算できないのでしょうか。
 現実には巨大な数の計算は行われているはずですが、どういう方法で行っているのか教えていただけませんか。

No.5569

Re:素朴な質問・・巨大な数を扱うには?
投稿者---kikk(2003/03/13 00:17:01)


ども。


> C言語では43億以上の数を扱うとオーバーフローになる可能性があると理解したのですが、それ以上の数は計算できないのでしょうか。

(約)43億というのは32ビット整数の制限ですね。とりあえず、32ビット以上
の整数型(long longとか__int64等)を使えば、それより大きな数(整数)を
あつかえます。また、doubleやlong doubleは32ビット整数よりも大きな数
(整数。もちろん実数も)をあつかえます。

これらの言語組み込みの型の範囲・精度はlimits.hに書かれています。


組み込み型の表現範囲よりも大きな数を扱いたい場合は、整数型の配列を
ひとつの数としてあつかいます。加減乗除やルート計算は専用の関数を
用意し、それをつかいます。「多倍長演算」等で検索してみてください。
# 円周率を計算するプログラムのソースを探してきて読むのもいいかも


では。

No.5571

Re:素朴な質問・・巨大な数を扱うには?
投稿者---すがり(2003/03/13 10:03:15)


># 円周率を計算するプログラムのソースを探してきて読むのもいいかも

C言語の話から少しそれてしまいますが…

この手の高精度な数値計算を言語レベルでサポートしているプログラミング言語
もあります。FORTRANなどがそれで、プログラマが精度(桁数)を指定して、
変数を宣言できたりします。
少し前に1億桁突破の新記録で話題になった円周率計算も、FORTRANで行われて
いたはず。この手の数値計算は、未だにFORTRANが主流なのかも。

No.5578

Re:素朴な質問・・巨大な数を扱うには?
投稿者---Taro(2003/03/13 16:03:57)


kikkさん、すがりさん、ありがとうございます。

 さっそく試してみました。double型で計算してみると簡単に出来たのであきれてしまいました。doubleとは、小数点の付いた実数を扱う場合にのみ用いるものだとばかり思っていましたので、確かめることもしないで投稿したのでした。
 long long型の場合は、「宣言に型が多すぎる。」とのエラー表示が出ました。

 田舎で、おもに本で独学している私にとっては窓から風を注ぎ込んでもらったようです。