据我所知,使用浮点数进行精确比较没有多大意义,因为本来应该是0.0001的值实际上可能会变成像0.0001000...0001这样。我应该实现自己的比较函数来指定精度,还是有一种常见的做法可以解决这个问题?
我曾经在C#中使用以下代码(我怀疑这仍然是错误的,因为Double值可能根本无法精确表示0.0001,即使将其设置为常量(如Michael Borgwardt在这里中所解释的那样)):
我曾经在C#中使用以下代码(我怀疑这仍然是错误的,因为Double值可能根本无法精确表示0.0001,即使将其设置为常量(如Michael Borgwardt在这里中所解释的那样)):
public static bool AlmostEquals(this double x, double y, double precision = 0.0001)
{
if (precision < 0.0)
throw new ArgumentException();
return Math.Abs(x - y) <= precision;
}
我应该在Scala中做类似的事情吗?
def =~=(d2:Double)(implicit p:Precision)
或~==
。 - Larry OBrien