c++中浮点数/双精度数的比较
Comparing two floats/doubles in c++
我读到浮点/双精度相等应该使用间隔(由某个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
相关文章:
- 为什么我的比较运算符不比较我的点长和双精度值?
- 当两个相等的双精度的相对比较不起作用时,我该怎么办?
- 将双精度与整数进行比较
- 将 32 位浮点数和不强制转换的 32 位整数与双精度进行比较,当其中一个值可能太大而无法完全适合另一种类型时
- 将当前时间 simTime.dbl() 与以前存储的双精度值进行比较并不总是给出正确的答案......为什么?
- Xcode 错误:指针和双精度之间的比较
- 使用具有整数表示和 ULP 的混叠正确比较双精度
- 关于在C/C++中比较整数和浮点/双精度
- C(++) 中双精度的排序/比较不稳定
- 比较两个双精度值但结果很奇怪
- 什么更贵?读取或比较整数,双精度
- 比较双精度和整数,不进行转换或转换
- 比较两个包含双精度的文件
- 两个双精度值的 C++ 比较无法正常工作
- 如何让数组将其值与双精度值进行比较
- 比较双精度堆栈导致Always Equal
- 正、负两个双精度的比较
- 比较两个不同的双精度数时返回true
- 比较双精度的简单方法
- 如何比较长型和双精度型