进行浮动和双重比较的最有效方法是什么?
比较两个 double 或两个 float 值的最有效方法是什么? 简单地这样做是不正确的: bool CompareDoubles1 (double A, double B) { return A == B; } 但是类似: bool CompareDoubles2 (double A, double B) { diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); } 似乎是废物处理。 有人知道更聪明的浮点比较器吗? #1楼 实际上,在数字软件中,您需要检查两个浮点数是否 完全 相等。 我在类似的问题上发布了 https://stackoverflow.com/a/10973098/1447411 因此,您不能说“ CompareDoubles1”通常是错误的。 #2楼 意识到这是一个古老的话题,但是本文是我发现的比较浮点数最直接的文章之一,如果您想探索更多,它也提供了更详细的参考,并且主要站点涵盖了所有问题处理浮点数 《浮点指南:比较》 。 我们可以在“ 浮点公差 ”中找到一些更实用的文章,并注意到存在 绝对公差 测试,在C ++中可以归结为: bool absoluteToleranceCompare(double x, double y) { return std::fabs(x - y) <= std: