其中是内置类型的实现:在c++中的float/double



我被告知在C++中避免对float/double类型执行equal或not_equal。但也有std::equal_to和std::not_equal_to模板函数
所以我想知道在c++中的float/double上使用std::equal_to和std::not_equal_to是否可靠?

我想知道c++中内置类型float/double的实现,但我找不到它们的源代码。你也可以和我分享他们的源代码吗?

首先,要解决这个问题:

在我所知道的标准库的所有实现中,std::equal_to<float/double>std::not_equal_to<float/double>分别简单地调用==!=

话虽如此:

你得到的关于避免使用==!=的建议通常是正确的,但有点过于简单化了。对浮点值进行相等或不相等的比较是完全合法的,并且具有非常明确的含义。然而,这很少是正确的做法

这背后有一些技术原因,但其要点是,数学上落在同一数字上的不同运算集往往最终得到不同的浮点值。仅仅改变一系列添加的顺序就可能导致不同的结果。所以像a + b == c + d这样简单的东西本质上是不可靠的。

如果你想看看把事情搞砸有多容易,编译并运行以下程序:

#include <iostream>
#include <iomanip>
int main() {
std::cout << std::setprecision(17) << 0.1 << "n";
}

最后,按照要求回答您的问题:;实施在哪里">

在现代环境中,在您最有可能为其编译代码的通用cpu上,我们没有可供您参考的实现源代码。浮点运算直接作为cpu级指令完成。如果你在处理一些微控制器、旧架构或其他奇特的计算机,那就另当别论了。

最新更新