だから私はユニットテストを行うためにCUnitを使用しています。私は次のようなものを期待しています
float x;
x = atof("17.99");
そして、アサートでこれをテストしたいと思います。明らかに、私ができるいくつかの小さなイプシロンで
CU_ASSERT(abs(x - atof("17.99")) < epsilon);
検討中ですが
r = atof("17.99");
CU_ASSERT(0 == memcmp(&x, &r, sizeof(float));
これはうまくいくようです。これを使用して、値に基づいて各テストでイプシロンを手動で設定する必要がないようにしたいと考えています。上記の場合、1e-6 で十分です。ただし、値が 1e-10 の場合、1e-6 のイプシロンを使用しても問題が発生しない可能性があります。開発者がしなければならない選択肢が多ければ多いほど、エラーの余地が大きくなります。
私の質問は次のとおりです。この手法はposixシステムで安定しているべきですか? つまり、比較される 2 つの浮動小数点数がまったく同じ手順で生成された場合、それらの内部表現はまったく同じでなければなりません。
編集:さらに言えば、最終的には CU_ASSERT_FLOAT_EQUAL マクロが必要です。