所以我使用 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));
这似乎确实有效。我希望使用它来避免必须根据值在每个测试上手动设置 epsilon。在上述情况下 1e-6 应该足够了;但是,如果值为 1e-10,使用 1e-6 的 epsilon 可能不会出现问题。开发人员必须做出的选择越多,出错的空间就越大。
我的问题是:这种技术在 posix 系统上应该稳定吗?也就是说,如果被比较的两个浮点数是由完全相同的步骤生成的,那么它们的内部表示应该完全相同。
编辑:更重要的是,我最终想要一个 CU_ASSERT_FLOAT_EQUAL 宏。