gpt4 book ai didi

scala - 如何比较 Scala 中的浮点值?

转载 作者:行者123 更新时间:2023-12-03 11:08:31 25 4
gpt4 key购买 nike

据我所知,精确比较对浮点值没有多大意义,因为 0.0001 实际上可能是 0.0001000...0001 之类的东西......我应该实现我自己的比较函数来指定精度还是对此有共同的做法吗?

我曾经在 C# 中使用以下内容(我怀疑这仍然是错误的,因为 Double 值可能根本无法表示 0.0001,甚至设置为常量(如 Michael Borgwardt 解释的 here )):

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 中做类似的事情吗?

最佳答案

是的,您可以执行与 Java 相同的操作。您还可以使用 Scala 的一些很酷的功能,并使用 ~= 方法对 Double 类进行皮条客,该方法采用隐式精度参数,该参数只需要指定一次。

scala> case class Precision(val p:Double)
defined class Precision

scala> class withAlmostEquals(d:Double) {
def ~=(d2:Double)(implicit p:Precision) = (d-d2).abs <= p.p
}
defined class withAlmostEquals

scala> implicit def add_~=(d:Double) = new withAlmostEquals(d)
add_$tilde$eq: (d: Double)withAlmostEquals

scala> 0.0~=0.0
<console>:12: error: could not find implicit value for parameter p: Precision
0.0~=0.0
^

scala> implicit val precision = Precision(0.001)
precision: Precision = Precision(0.001)

scala> 0.0 ~= 0.00001
res1: Boolean = true

关于scala - 如何比较 Scala 中的浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8385458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com