私はおそらくOPの質問に答えているのではなく、説明が必要な多かれ少なかれあいまいなアドバイスに答えています。
2つの浮動小数点値を比較して等しいかどうかを比較することは絶対に可能であり、実行できます。タイプが単精度または倍精度の場合、多くの場合、精度はそれほど重要ではありません。
比較自体に至るまでのステップには、細心の注意と浮動小数点のすべきこととすべきでないこと、理由とそうでない理由の完全な理解が必要であると述べました。
次のCステートメントを検討してください。
result = a * b / c;
result = (a * b) / c;
result = a * (b / c);
ほとんどのナイーブな浮動小数点プログラミングでは、それらは「同等」、つまり「同じ」結果を生成すると見なされます。浮動小数点の現実の世界では、そうかもしれません。または、実際には、最初の2つは同等です(2つ目はCの評価ルールに従うため、つまり、左から右に同じ優先度の演算子です)。3番目は、最初のtwpと同等である場合と同等でない場合があります。
どうしてこれなの?
「a*b/c」または「b/c * a」は、「不正確」例外を引き起こす可能性があります。つまり、中間結果または最終結果(または両方)が正確ではありません(浮動小数点形式で表現可能)。この場合、結果は多かれ少なかれ微妙に異なります。これにより、最終結果が等式の比較に適している場合とそうでない場合があります。これを認識し、一度に1つずつ操作を1ステップずつ実行し、中間結果に注意することで、患者プログラマーは「システムを打ち負かす」ことができます。つまり、実質的にあらゆる状況で高品質の浮動小数点比較を構築できます。
他のすべての人にとって、浮動小数点数の等式比較を渡すことは、良い、確かなアドバイスです。
ほとんどのプログラマーは整数演算がさまざまな状況で予測可能な切り捨てをもたらすことを知っているので、それは本当に少し皮肉です。浮動小数点に関しては、ほとんどの人が多かれ少なかれ、結果が正確ではないことに驚いています。図に行きます。