27

int通常は32ビットですが、標準でintは、一定の幅を持つことが保証されていません。したがって、32ビットが必要な場合は、intを含めstdint.hて使用しますint32_t

フロートに相当するものはありますか?フロートは均一に格納されていないため、つまり、符号、指数、仮数など、フロートの場合は少し複雑になります。double1符号ビット、10ビット指数、および52/53ビット仮数(非表示ビットをカウントするかどうかによって異なります)で64ビットに格納されることが保証されているものが必要です。

4

6 に答える 6

4

現在のC99ドラフト標準である付録Fによると、これは2倍になるはずです。もちろん、これはコンパイラが標準のその部分を満たしていることを前提としています。

C ++の場合、0xドラフトと1998バージョンの標準のドラフトを確認しましたが、IEEE 754 / IEC 559を指定するnumeric_limitsのブール値を超えて、C99標準のその部分のような表現については何も指定していないようです。 Josh Kelleyが言及しているように、そのプラットフォームで使用されます。

IEEE 754をサポートしていないプラットフォームはほとんどありませんが、IEEE 754は明確に定義されており、非常にうまく機能するため、通常、別の浮動小数点形式を設計しても効果はありません。確かに64ビットです(IEEE 754-1985は、結局のところ、その形式を倍精度と呼んでいるので、理にかなっています)。

倍精度が倍精度ではないという偶然の機会に、ユーザーが報告できるように健全性チェックを組み込み、そのプラットフォームを個別に処理できるようにします。プラットフォームがIEEE754をサポートしていない場合は、自分で実装しない限り、とにかくその表現を取得することはできません。

于 2009-08-26T01:11:31.727 に答える
4

特定のサイズと形式を保証するタイプはわかりませんが、C++にはいくつかのオプションがあります。<limits>ヘッダーとそのstd::numeric_limitsクラステンプレートを使用して、特定の型のサイズを調べstd::numeric_limits::digits、仮数のビット数を示しstd::numeric_limits::is_iec559、型がIEEE形式に従っているかどうかを示す必要があります。(ビットレベルでIEEE番号を操作するサンプルコードについては、Google Testのgtest-internal.hのFloatingPointクラステンプレートを参照してください。)

于 2009-08-26T01:19:13.437 に答える
1

もう1つの問題は、浮動小数点数の表現です。これは通常、実行しているハードウェアに基づいています(常にではありません)。ほとんどのシステムはIEEE754浮動小数点標準を使用していますが、他のシステムにも独自の標準を設定できます(例としてVAXコンピューターがあります)。

IEEE754のウィキペディアの説明http://en.wikipedia.org/wiki/IEEE_754-2008

于 2009-08-26T01:15:44.953 に答える
1

私が知っているフロート/ダブルのバリエーションはありません。浮動小数点は32ビットで、doubleは64ビットです。浮動小数点のセマンティクスはかなり複雑ですが、定数は存在します。

#include <limits>

boost.numeric.boundsは、std::numeric_limitsにすべてが必要ない場合のよりシンプルなインターフェイスです。

于 2009-08-26T01:17:06.650 に答える
0

残念ながら、それも保証されていません。チェックインする必要numeric_limits< T >があり <limits>ます。

しかし、繰り返しになりますが、doubleが64ビット長ではない実装については聞いたことがありません。あなたがただ仮定したいのなら、あなたはおそらくそれで逃げるでしょう。

于 2009-08-26T01:08:54.733 に答える
-4

この種の「固定幅タイプ」の最大の問題の1つは、それを間違えやすいことです。おそらく32ビット整数は必要ありませんでした。ポイントは何ですか?必要なのは、少なくとも1>>31を格納できる整数型です。それはlong intです。あなたもその必要はありません<stdint.h>

float同様に、スクリプト言語は、基盤となるC++が少なくとも32ビットである限り機能するFPタイプを実装できます。これでも正確な動作が得られないことに注意してください。私はC++が保証しないとかなり確信しています-1.0/-3.0==1.0/3.0

于 2009-08-26T10:32:21.623 に答える