1

C++ 標準では、浮動リテラルについて次のように述べています。

スケーリングされた値がその型の表現可能な値の範囲内にない場合、プログラムは不適切な形式です。

スケーリングされた値は、有効部分に 10 ^ 指数部分を掛けたものです。

x86-64 では:

  • float単精度IEEE-754です
  • double倍精度IEEE-754です
  • long double80 ビットの拡張精度 IEEE-754 です。

このコンテキストでは、これら 3 つのタイプのそれぞれの表現可能な値の範囲は? これはどこに文書化されていますか? またはどのように計算されますか?

4

3 に答える 3

4

指数ビットと仮数ビットの数がわかっている場合、 IEEE-754 形式に基づいて、表現可能な最大絶対値は次のようになります。

2^(2^(E-1)-1)) * (1 + (2^M-1)/2^M)

最小絶対値 (ゼロまたはdenormalsを含まない) は次のとおりです。

2^(2-2^(E-1))
  • 単精度の場合EM8、23 です。
  • 倍精度の場合EM11、52 ​​です。
  • 拡張精度については、よくわかりません。x87 FPU の 80 ビット精度について言及している場合、私が知る限り、それは IEEE-754 に準拠していません...
于 2013-03-02T13:23:53.313 に答える
2

答えは (IEEE 浮動小数点を備えたマシンを使用している場合) にありfloat.hます。 FLT_MAXDBL_MAXおよびLDBL_MAX。IEEE を完全にサポートするシステムでは、約 3.4e+38、1.8E+308、および 1.2E4932 です。(正確な値は異なる場合があり、コンパイラが入力と丸めを行う方法に応じて、別の方法で表現される場合があります。たとえば、g++ はそれらをコンパイラの組み込みとして定義します。)

編集:

あなたの質問を WRT (私も他の回答者も実際に回答していないため): 表現可能な値の範囲は 、 は、、またはのいずれかです。[-type_MAX...type]typeFLTDBLLDBL

于 2013-03-02T13:40:10.563 に答える
-4

私は 64 ビットで表現可能な最大の数を探していて、最終的には独自の 500 桁の浮動小数点計算機を作成していました。これは、64ビットすべてがオンになっている場合に思いつくものです

18,446,744,073,709,551,615

18京 446兆 744兆 730億 7億900万 551千 615

于 2015-09-08T18:57:02.403 に答える