0

したがって、私の C++ コードには、デバッグ用に次のコード行があります。

if(float1 != float2)
{
    std::cout<<float1<<" "<<float2<<std::endl;
}

何が起こっているかというと、プログラムが if ステートメントに入っているということです...しかし、2 つの float 値を出力すると、それらは同じです。しかし、それらが同じである場合は、この if ステートメントを完全にバイパスする必要があります。ですから、なぜこれが起こっているのか、私は本当に混乱しています。

4

2 に答える 2

6

sのfloat値は非常に似ている場合があります。デフォルトでは、I/O ライブラリは浮動小数点値の出力を切り捨てます。precisionのメンバー関数を呼び出すことで、完全な精度を確保できますstd::cout

if(float1 != float2)
{
    std::cout.precision(9);
    std::cout<<float1<<" "<<float2<<std::endl;
}

これで違いがわかるはずです。値9は、IEEE 754 32 ビット浮動小数点で表現可能な base-10 の桁数です (以下の @EricPostpischil のコメントを参照してください)。

于 2013-05-20T23:10:05.240 に答える
1

浮動小数点値は通常、バイナリ形式でコンピューターのメモリに格納されます。一方、印刷する値coutは 10 進数形式で表されます。2 進浮動小数点表現から 10 進表現への変換は、変換設定によっては損失が大きくなる可能性があります。これは、印刷したものが実際にメモリに保存されているものと必ずしも同じではないことを意味します。これは、 と を直接比較すると異なると言えるのに、10 進数の出力は同じに見える理由を説明してfloat1float2ます。

于 2013-05-20T23:21:25.023 に答える