小编典典

Double.Epsilon等于,大于,小于,小于或等于,大于或等于

c#

http://msdn.microsoft.com/en-
us/library/system.double.epsilon.aspx

如果您创建一个确定两个浮点数是否可以视为相等的自定义算法,则必须使用大于Epsilon常数的值来建立两个值被视为相等的可接受的绝对绝对差值。(通常,差异的幅度是Epsilon的许多倍。)

因此,这不是可用于比较的epsilon吗?我不太了解MSDN的用语。

可以在此处的示例中用作epsilon吗?-
进行浮动和双重比较的最有效方法是什么?

最后,这似乎真的很重要,因此我想确保我有一个可靠的平等实现,大于,小于,小于或等于以及大于或等于。


阅读 447

收藏
2020-05-19

共1个答案

小编典典

我不知道 什么 时候他们写道,他们吸烟。 Double.Epsilon是最小的可表示的非标准浮点值,不为0。您所知道的是,如果存在截断错误,它将始终
于此值。更大。

System.Double类型可以表示精确到15位数字的值。因此,如果双精度值x等于某个常数,则简单的一阶估计是使用常数* 1E-15的ε

public static bool AboutEqual(double x, double y) {
    double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
    return Math.Abs(x - y) <= epsilon;
}

但是,您必须要小心,截断错误可能会累积。如果xy是计算值,则必须增加epsilon。

2020-05-19