42

ffloat リテラルで接尾辞を指定する必要があるのはなぜですか?

4

3 に答える 3

52

doubleそれ以外の場合は、 よりも一般的に使用される浮動小数点型であるにデフォルト設定されるためfloatです。

Java 言語仕様のセクション 3.10.2から:

浮動小数点リテラルは、末尾に ASCII 文字の F または f が付いている場合、float 型です。それ以外の場合、その型は double であり、オプションで ASCII 文字 D または d をサフィックスとして付けることができます (§4.2.3)。

(個人的には、すべての場合に明確にするために、デフォルトがないようにしたいと思いますが、それは別の問題です。)

于 2012-12-31T14:48:06.703 に答える
37

接尾辞のない浮動小数点リテラルはdoubleであるため、丸めとは、floatとdoubleに丸めると、小さなリテラルでも異なる値をとることができることを意味します。これは、次の例で確認できます。

float f = (float) 0.67;
if(f == 0.67) 
  System.out.print("yes");
else 
  System.out.print("no");  

no0.67は、floatに丸めた場合と、doubleに丸めた場合の値が異なるため、これは出力されます。一方で:

float f = (float) 0.67;
if(f == 0.67f) 
  System.out.print("yes");
else 
  System.out.print("no");

…出力yes

編集
2番目の例:

if(0.67 == 0.67f) 
  System.out.print("Equal");
else 
  System.out.print("Not Equal");  

…出力Not Equal

于 2012-12-31T14:52:52.553 に答える
5

として表すことができる浮動小数点型が 2 つあります100.0。デフォルトにできるのは 1 つだけです。精度が限られているため、float は非常に特殊な型です。通常は double であるため、これが適切なデフォルトです。

最新のプロセッサでは、float と double の計算パフォーマンスは類似しています。float を使用する唯一のケースは、制限された精度を必要とするパフォーマンスが重要な状況での大規模な配列です。float を使用すると、1 つのキャッシュ ラインに収まる浮動小数点値の数が 2 倍になります。それでも、float が特定の計算に十分な精度を与えるかどうかを判断することは、めったに簡単ではありません。

于 2012-12-31T15:20:54.653 に答える