• ベストアンサー

c言語の変数の型について

浮動小数点数の変数の型ってfloat、double、long doubleがありますよね?(その他もあったら教えてください) doubleはfloatの倍精度らしいですが、倍精度ってのは扱える数字の範囲が2倍なのか有効桁が2倍なのかわからないんで教えてほしいです。ちなみに、doubleとlong doubleの違いも判りません。 あと、これらの変数はprintfで出力するときは最高で8桁までしか出力できないんでしょうか?20桁とかは無理なんですかね?

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 浮動小数点数の変数の型ってfloat、double、long doubleがありますよね?(その他もあったら教えてください) 少なくとも、float _Complex, double _Complex, long double _Complexがあります。 あと、任意実装ですが、float _Imaginary, double _Imaginary, long double _Imaginaryもあります。 ISO/IEC TR 24732では、_Decimal32, _Decimal64, _Decimal128もあります。 独自拡張まで含めれば、short double型をサポートするような処理系もあります。 > doubleはfloatの倍精度らしいですが、 そうとは限りません。 > あと、これらの変数はprintfで出力するときは最高で8桁までしか出力できないんでしょうか?20桁とかは無理なんですかね? printf("%.20g", x); のようにすれば20桁まで出力できますが、有効桁数が何桁あるかは処理系によります。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

規格の詳細は他の人に任せるとして、よくあるIEEE754ベースの浮動小数点数では floatは32ビットで、有効数字に23ビット、指数に8ビット、符号に1ビット使います。 なお、有効数字は正規数では隠れた1を使って実質24ビットになります。 doubleは64ビットで、有効数字52+1ビット、指数11ビット、符号1ビットです。 有効数字は10進ではfloatで約7桁、doubleで約15桁です。有効数字は約2倍ですね。 指数はfloatが-127~126(10進で38桁くらい)、doubleが-1023~1022(10進で308桁くらい)です。表現範囲は8倍くらいになりますか。 long doubleのサイズは本当にマチマチですからあてになりません。doubleと同じだったり、Intel x87レジスタの80ビットサイズだったり、IEEE754四倍精度の128ビットだったり。 # Visual C++はdoubleと同じらしい。16ビット世代は80ビットだったようだが # Borland C++Builderは80ビットの様子。GCCも80ビット? # 128ビットの処理系は未確認

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

まず。Cの型の大きさは、環境に依存するところがあるので、全てに共通、というわけにはいきません。それを踏まえた上で。 > doubleはfloatの倍精度らしいですが、倍精度ってのは扱える数字の範囲が2倍なのか有効桁が2倍なのかわからないんで教えてほしいです。 32bit Windows用でよく使われる形式だと float 32bit double 64bit と内部表現のビット幅が倍です。 仮数、指数ともに使用ビット数が増えているので、有効桁、範囲は単純に倍ではありません。 ただし、規格では「doubleはfloat以上の桁」としかありません。「倍精度」と名前がついていますが、「倍」どころか「floatと同じ」であってもルール違反ではないです。 > あと、これらの変数はprintfで出力するときは最高で8桁までしか出力できないんでしょうか?20桁とかは無理なんですかね? printfのマニュアルで「書式文字列」のところをよく読んでますか?幅指定のところに小数点で精度の指定ができます。 例: %8.2f :全体で8桁以上、うち小数点以下が2桁の「f」形式 ただ、20桁指定しても有効な桁は上の方だけになりますが

すると、全ての回答が全文表示されます。

関連するQ&A