比较c ++中的两个浮点数/双精度数

时间:2015-07-31 05:26:17

标签: c++

我读到浮点/双打等式应该使用一个间隔(由一些epsilon给出):

bool aresame(double a, double b)
{
    return (fabs(a-b) < EPSILON);
}

我可以使用或者我必须自己定义EPSILON的任何预定义值,例如0.0000000001吗?

2 个答案:

答案 0 :(得分:1)

此问题已有很多问题,但epsilon值取决于所比较的值。由于浮点数具有一定数量的准确数字,因此在1E19左右比1E-19进行比较是非常不同的。你不能使用相同的epsilon,因为准确性不够。

因此,您必须知道数字的范围并相应地确定epsilon值。

答案 1 :(得分:0)

我建议如果你做一些关于比较浮点数的更多信息,那将是一个好主意。 这是一篇很好的文章,作为我发现的一个简单例子。

Here is a link to updated article。 我相信还有更多 关于您的问题,您可以在(float.h)

中检查以下常量

FLT_EPSILON
DBL_EPSILON
LDBL_EPSILON