• ベストアンサー

型について

自分は今、1000や10000とかの大きな数の階乗を求めるプログラムを作成しています。それでその答えを入れる変数の型をfloat型にして、printf()内では%fとかにしてみたのですが、”Floating exception: Overflow”とでてうまくできませんでした。 このような大きな数を扱える型を教えて下さい!

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

  • ベストアンサー
  • funi2
  • ベストアンサー率53% (14/26)
回答No.4

異常に大きな数を"正確に"扱うためには"多倍長整数"というものを使います。 このためのライブラリでは, GMP, NTLというものがあります。 gimmickさんのいうように概算でよいならば, 皆さんの言う通り, log doubleで良いと思います。 GMP, NTLを使うにはまたちょっと勉強が必要ですが, がんばってください。日本語のページもちらほら見つけることもできます。 参考URLにNTLを公開しているページを揚げます。英語ですが...

参考URL:
http://www.shoup.net/

その他の回答 (3)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

1000の階上は doubleだと普通オーバーフローしますね。 gccだとlong double(10バイト)がありますがそれでもオーバーフローします。 double 型(8バイト)の値の範囲がおおよそ 1.7E-308 ~ 1.7E+308 有効数字は15~16桁です。 基本的にはそういう計算をする場合、C++だと独自のクラスを作ります。 ビット演算の方法さえしっていれば大した量にはなりません。 クラスでなくても構造体と関数でやる事も可能です。 ちなみにjavaだとBigDecimal というライブラリーが標準でついています。

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

C言語では数千桁、数万桁の整数を扱えるような型はありませんし、doubleを使ったとしても、ここまで大きな数は表現できません。また、浮動小数点型の場合、仮にオーバーフローにならないとしても有効桁数の問題があります。おそらく、自分で型や関数を定義するか、ライブラリを手に入れるしかないと思います。(処理系依存ですが、1000の階乗の方はlong doubleで計算できるかもしれません。) # 正確な値を求める必要があるのか、概算でも良いのかを明確にすると、適切な回答が得やすいと思います。

  • nana_ko
  • ベストアンサー率19% (89/467)
回答No.1

doubleがいちばん大きなデータ型だったと思います。 doubleは試してみましたか???