【发布时间】:2021-08-22 19:34:32
【问题描述】:
if (std::abs(double1 - double2) < std::numeric_limits<double>::epsilon())
std::cout<<"Equal";
else
std::cout<<"Not equal";
现代 C++11/14/17/21 的这段代码是否仍然是我们应该比较浮点数和双精度数的方式,还是现在只写就可以了
if (double1 == double2)
编译器会为我们处理 epsilon 问题吗?
顺便说一句:在检查 epsilon 时写
【问题讨论】:
-
这与现代或非现代无关,但任何一种方式都可能是对的或错的,这取决于你真正想要什么。
==comares 是平等的,还有doubles,你只需要知道这是否真的想要你想要的 -
是的,它仍然是这样做的。原因见:stackoverflow.com/questions/588004/…
-
编译器会为我们处理 epsilon 问题? 不,它仍然会按照你说的做。
-
不,没有变化。 C++ 的主要目标之一是性能,并且进行 epsilon 检查比不进行检查更昂贵,因此默认运算符不会这样做。如果要与 epsilon 进行比较,则必须自己进行。
-
如果你想检查是否相等,
==一直是你需要使用的。如果您想检查近似相等,您需要首先确定您的意思(100000000和100000001是否近似相等?0.000001和0.0000000001是否近似相等?这实际上取决于上下文)。跨度>
标签: c++ c++11 floating-point