gpt4 book ai didi

c++ - 使用 Wfloat-equal 选项将 float 与 1 或 0 进行比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:57 28 4
gpt4 key购买 nike

我对在代码中执行浮点相等比较的问题有些熟悉。

目前我在(GCC, Clang) 上编译的代码库启用了以下选项:-Wfloat-equal

在代码库中有以下示例比较:

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 的特殊情况,它们每个都有精确的浮点表示 (double, float) 并且代码显然在完全相等之后,而不是接近于一些次要的东西区别-

有没有一种方法可以重写代码,使其不会引发相关的 Wfloat-equal 诊断,并且还可以移植并支持 float 和 double 类型?

最佳答案

如何使用 std::equal_to。就 GCC 而言,它会在处理包括 float-equal

在内的系统 header 时禁用一大堆检查
template <typename FloatType>
void foo(FloatType v) {
if (std::equal_to<FloatType>()(v,FloatType(1))) {
...
}
else if (std::equal_to<FloatType>()(v,FloatType(0))) {
....
}
}

关于c++ - 使用 Wfloat-equal 选项将 float 与 1 或 0 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43604873/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com