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

Comparing two floats/doubles in c++

本文关键字:比较 双精度 浮点数 c++      更新时间:2023-10-16

我读到浮点/双精度相等应该使用间隔(由某个epsilon给出)来实现:

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

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

关于这个已经有很多问题了,但是epsilon的值取决于所比较的值。由于浮点数有一定数量的精确数字,所以在1E19和1E-19附近比较是非常不同的。你不能对它们使用相同的,因为精度不够。

因此,你必须知道数字的范围,并据此确定ε值。

我建议你多读一些比较浮点数的书。这是我发现的一个很好的例子。

这是更新文章的链接。我相信还有很多。
关于您的问题,您可以检查(float.h)

中的以下常量

FLT_EPSILON
DBL_EPSILON
LDBL_EPSILON