dポイントプレゼントキャンペーン実施中!

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

A 回答 (4件)

異常に大きな数を"正確に"扱うためには"多倍長整数"というものを使います。


このためのライブラリでは, GMP, NTLというものがあります。
gimmickさんのいうように概算でよいならば, 皆さんの言う通り, log doubleで良いと思います。

GMP, NTLを使うにはまたちょっと勉強が必要ですが, がんばってください。日本語のページもちらほら見つけることもできます。
参考URLにNTLを公開しているページを揚げます。英語ですが...

参考URL:http://www.shoup.net/
    • good
    • 0

1000の階上は


doubleだと普通オーバーフローしますね。
gccだとlong double(10バイト)がありますがそれでもオーバーフローします。
double 型(8バイト)の値の範囲がおおよそ 1.7E-308 ~ 1.7E+308
有効数字は15~16桁です。

基本的にはそういう計算をする場合、C++だと独自のクラスを作ります。
ビット演算の方法さえしっていれば大した量にはなりません。
クラスでなくても構造体と関数でやる事も可能です。
ちなみにjavaだとBigDecimal
というライブラリーが標準でついています。
    • good
    • 0

C言語では数千桁、数万桁の整数を扱えるような型はありませんし、doubleを使ったとしても、ここまで大きな数は表現できません。

また、浮動小数点型の場合、仮にオーバーフローにならないとしても有効桁数の問題があります。おそらく、自分で型や関数を定義するか、ライブラリを手に入れるしかないと思います。(処理系依存ですが、1000の階乗の方はlong doubleで計算できるかもしれません。)

# 正確な値を求める必要があるのか、概算でも良いのかを明確にすると、適切な回答が得やすいと思います。
    • good
    • 0

doubleがいちばん大きなデータ型だったと思います。


doubleは試してみましたか???
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!