2011-10-08 11 views
3

ほとんどの浮動引数を必要とするBox2Dライブラリを使用しているので、私は尋ねます。 0.00f形式を使用するサンプルコードが多数ありますが、実際の違いがあるかどうかはわかりません。0.00私は後でfを追加しないで自分自身を傷つけますか?それはスピードのものですか?他人がそうでない場合には、f加点が必要な意味合いがありますか?"2.00"と "2.00f"の間に機能的な違いはありますか?

tl; dr? 0.00の代わりに0.00fを使用するのはなぜですか?

+1

多分あなたは[この質問](http://stackoverflow.com/q/7662109/743214)を見たいと思うかもしれません。 –

+0

またはこれhttp://stackoverflow.com/questions/2391818/f-after-number-float-in-objective-c-c/2392409#2392409 – epatel

答えて

6

接尾辞fの接尾辞は、倍精度リテラルではなく単精度(浮動小数点型)のリテラルになります。これは、通常、64ビット浮動小数点の代わりに32ビットを意味します。

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

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

2.00
+6

「定数」よりも「リテラル」が適切かもしれません。 *リテラル*の型は疑問です。 –

+2

'float'は必ずしもサイズが' 32ビット 'であるとは限りません。これは実装定義です。 – Nawaz

+0

ありがとうございます、この文脈では、あなたは正しい "リテラル"がより適切と思われます。ビットサイズも固定されています。 – CodesInChaos

2

のタイプはdoubleあり、2.00fのタイプはfloatあります。

接尾辞fは、リテラル2.00を浮動小数点型に変換し、精度を低下させます。それ以外の場合は、リテラルはdoubleタイプです。

4

floatに割り当てる限り、の値はすべての数値タイプで正確かつ正確に表現できるため、違いはありません。

重要な違いは、タイプ2.0ためdoublefloat2.0fおよび2ためintであり、リテラルのあります。したがって、引数タイプの控除に違いがあります。

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

foo(2); 
foo(2.0f); 
foo(2.0); 
2

デフォルトの仮定はdoubleです。 f接尾辞を指定すると、それが必ずfloat

5

と解釈されます。 2.00はタイプdoubleであり、2.00fタイプはfloatです。正確な精度とフォーマットの意味は、使用するプラットフォームによって異なります。あなたのコードに1つのコードを使用するかどうかは、それが使用されるコンテキストによって決まります。

(基本数値型の)明示型変数の初期化子としては違いはありませんが、関数呼び出しで使用すると、どのオーバーロードやテンプレートの特殊化が使用されるかに影響する可能性があります。 auto型指定子またはdecltype指定子で式として、宣言されたオブジェクトの種類が影響を受けるを使用して宣言に初期化子として使用明らか

、。

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

auto d = 2.00; 
auto f = 2.00f; 
関連する問題