6

次のような行を含む多くの 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ですか?

4

4 に答える 4

6

次の場合に使用する必要があります。

float x = 1/3;

1 または 3 のいずれかに a が必要.0です。そうでない場合、x は常に 0 になります。

于 2012-09-21T18:04:01.917 に答える
1

aがの場合int、これらの2行は完全に同等ではありません。

float b = 3.0f * a;
フロートb=3 * a;

a右側は整数演算を使用して評価されるため、2番目の値が大きすぎると、サイレントにオーバーフローします。しかし、最初のものは完全に安全です。

ただし、例のようにaがであるfloat場合、2つの式は同等です。どちらを使用するかは、個人的な好みの問題です。最初のものはおそらくより衛生的です。

于 2012-09-21T19:05:27.037 に答える
0
float b = 3.0f * a; 

これは、3.0 が double ではなく float として作成されるようにするために行われることがあります。

于 2012-09-21T18:15:49.743 に答える
0

それは、数字で何をしているかによって多少異なります。forを含む浮動小数点リテラルFの型は、 typefloatです。接尾辞のない浮動小数点リテラルの型は型doubleです。fその結果、接尾辞を使用する場合と使用しない場合では、微妙な違いが生じる場合があります。

部分式に少なくとも 1 つの浮動小数点型のオブジェクトが含まれている限り、おそらくあまり問題にはなりません。整数が浮動小数点として解釈される接尾辞を使用することがより重要です。部分式に浮動小数点値が含まれていない場合は、整数演算が使用されます。結果が整数になるため、これは大きな影響を与える可能性があります。

于 2012-09-21T18:16:02.727 に答える