4

ほとんどが float 引数を必要とする Box2D ライブラリを使用しているためです。0.00f形式を使用するコード例はたくさんありますが、それと単純な古い0.00の間に実際の違いがあるかどうかはよくわかりません。

追加のfを追加しないと、後で自分を傷つけることになりますか? スピードの事ですか?他の人が必要としないときにf加数を必要とするある種の意味合いはありますか?

TL;DR: 0.00 ではなく 0.00f を使用する必要があるのはなぜですか?

4

6 に答える 6

8

サフィックスにより、f倍精度リテラルではなく単精度 (float) リテラルになります。これは通常、64 ビット浮動小数点ではなく 32 ビットを意味します。

浮動小数点定数は、デフォルトで double 型になります。接尾辞 f または l (または F または L — 接尾辞は大文字と小文字を区別しません) を使用すると、定数をそれぞれ float または long double として指定できます。

http://msdn.microsoft.com/en-us/library/tfh6f0w2(v=VS.100).aspx

于 2011-10-08T13:38:05.537 に答える
5

違いがあります。2.00は typedouble2.00f持ち、 type を持ちfloatます。これの正確な精度と形式の意味は、プラットフォームによって異なります。どちらを使用するかによってコードに実際的な違いが生じるかどうかは、使用されるコンテキストによって異なります。

明示的に型指定された (基本的な数値型の) 変数の初期化子としては違いはありませんが、関数呼び出しで使用すると、どのオーバーロードまたはテンプレートの特殊化が使用されるかに影響を与える可能性があります。

auto 明らかに、型指定子を使用した宣言で初期化子として使用したり、decltype-specifier で式として使用したりすると、宣言されているオブジェクトの型が影響を受けます。

decltype(2.00) x = 2.00f; // confusing
decltype(2.00f) y = 2.00; // also confusing

auto d = 2.00;
auto f = 2.00f;
于 2011-10-08T13:40:21.800 に答える
4

それらを a に割り当てる限り、はすべての数値型で正確かつ正確に表現できるfloatため、まったく違いはありません。

重要な違いは、for 、for 、およびforであるリテラルのです。したがって、引数の型の推定に違いが生じます。double2.0float2.0fint2

void foo(int) { cure_cancer(); };
void foo(float) { wipe_hard_disk(); }
void foo(double) { exit(0); }

foo(2);
foo(2.0f);
foo(2.0);
于 2011-10-08T13:39:35.193 に答える
2

の型2.00double、の型は2.00fですfloat

サフィックスfはリテラル2.00を float 型に変換し、精度を下げます。それ以外の場合、リテラルはdouble型です。

于 2011-10-08T13:38:46.147 に答える
2

デフォルトの仮定は ですdoublef接尾辞を指定すると、それがfloat

于 2011-10-08T13:40:18.530 に答える