【发布时间】:2018-10-17 20:52:06
【问题描述】:
我正在尝试做一些超级简单的事情......
let Average (a : float list) : (float option) =
let add (x : float) (y : float) = x+y
match a.Length with
| 0 -> None
| 1 -> None
| _ -> Some((List.fold add 0.0 a)/(float)a.Length)
let CompareResult func input expected =
(func input) = expected
这是我的两个功能。 当我做 比较结果平均值 [5.8;6.6;9.4;3.5;4.0](约 5.86) 我是假的。
任何想法为什么会这样会非常受欢迎。 谢谢
【问题讨论】:
-
欢迎来到令人兴奋的浮点运算世界。由于微小的差异,两个看似相等的值(都显示为 5.86)可能并不真正相等。见,例如randomascii.wordpress.com/2012/02/25/…
-
好的,谢谢。我已将代码更改为 ((func input) - expected)
-
使用
System.Double.Epsilon是not recommended 进行相等性测试。
标签: f#