次のような行を含む多くの C++ コードを目にします。
float a = 2;
float x = a + 1.0f;
float b = 3.0f * a;
float c = 2.0f * (1.0f - a);
.0f
これらのリテラルの後にこれらは本当に必要ですか? これらを省略すると、数値の精度が失われますか?
次のような行がある場合にのみ必要だと思いました:
float a = 10;
float x = 1 / a;
どこで を使うべき1.0f
ですか?
次のような行を含む多くの C++ コードを目にします。
float a = 2;
float x = a + 1.0f;
float b = 3.0f * a;
float c = 2.0f * (1.0f - a);
.0f
これらのリテラルの後にこれらは本当に必要ですか? これらを省略すると、数値の精度が失われますか?
次のような行がある場合にのみ必要だと思いました:
float a = 10;
float x = 1 / a;
どこで を使うべき1.0f
ですか?
次の場合に使用する必要があります。
float x = 1/3;
1 または 3 のいずれかに a が必要.0
です。そうでない場合、x は常に 0 になります。
a
がの場合int
、これらの2行は完全に同等ではありません。
float b = 3.0f * a;
フロートb=3 * a;
a
右側は整数演算を使用して評価されるため、2番目の値が大きすぎると、サイレントにオーバーフローします。しかし、最初のものは完全に安全です。
ただし、例のようにa
がであるfloat
場合、2つの式は同等です。どちらを使用するかは、個人的な好みの問題です。最初のものはおそらくより衛生的です。
float b = 3.0f * a;
これは、3.0 が double ではなく float として作成されるようにするために行われることがあります。
それは、数字で何をしているかによって多少異なります。f
orを含む浮動小数点リテラルF
の型は、 typefloat
です。接尾辞のない浮動小数点リテラルの型は型double
です。f
その結果、接尾辞を使用する場合と使用しない場合では、微妙な違いが生じる場合があります。
部分式に少なくとも 1 つの浮動小数点型のオブジェクトが含まれている限り、おそらくあまり問題にはなりません。整数が浮動小数点として解釈される接尾辞を使用することがより重要です。部分式に浮動小数点値が含まれていない場合は、整数演算が使用されます。結果が整数になるため、これは大きな影響を与える可能性があります。