在OCaml中如何比较浮点数?

4
在OCaml中,比较整数0和整数0会返回true; 然而,比较浮点数0.0.会返回false:
# 0 == 0;;
- : bool = true
# 0. == 0.;;
- : bool = false

如何正确比较浮点数?


1
在编程中,始终使用一个 delta 值来比较浮点数,例如 if (f1 - f2) < 0.0000001。 - Leo
2
@Leo:你在比较中忘记了绝对值。 - Anthony Scemama
1
通常情况下,您应该使用相对比较而不是绝对比较。 - nlucaroni
@AnthonyScemama 很好的观点,谢谢。 - Leo
1个回答

7
不要使用“物理相等”的专用运算符==,在日常代码中请使用=
# 0 = 0;;
- : bool = true
# 0.0 = 0.0;;
- : bool = true

对于不等式,请使用<>!=运算符用于“物理不等式”,在日常代码中也应该像瘟疫一样避免使用。

# 0 <> 0;;
- : bool = false
# 0.0 <> 0.0;;
- : bool = false

谢谢Jeffrey。但是我们应该如何缓解'!='呢?'# 0. != 0. ;; -:bool = true #0!= 0;; -:bool = false' - UnSat
1
很好的问题。出于同样的原因,请使用<>。我会更新我的答案。 - Jeffrey Scofield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接