4
我对在代码中执行浮点相等比较的问题有点熟悉。使用Wfloat-equal选项比较浮点数为1或0
目前的代码库,我编译的(GCC,锵)启用以下选项:-Wfloat平等
而在代码库有下面的例子比较:
template <typename FloatType>
void foo(FloatType v) {
if (v == FloatType(1)) {
...
}
else if (v == FloatType(0)) {
....
}
}
foo的函数被调用,如下:
double d = 123.98;
float f = 123.98f;
foo(d);
foo(f);
由于1和0的特殊情况,每个具有确切表示浮点(双,浮法)其中在有确切的平等,而不是东西,是一些微小的差别收盘后的代码显然是 -
是有一种重写代码的方法,它不会提高相关联的诊断功能,并且也是可移植的,并支持浮点类型和双精度类型?
你可以使用GCC的'的#pragma GCC诊断推/流行/ ignored'禁用诊断只是那些系统头时,它会关闭了一大堆检查线。 –
当你说memcmp时,你总是可以使用'memcmp' – VTT
@VTT,你的意思是为值0和1有一个单独的变量吗? –