【问题标题】:Absolute value for floats in core OCaml核心 OCaml 中浮点数的绝对值
【发布时间】:2009-03-20 17:37:56
【问题描述】:
我需要OCaml中浮点数的绝对值函数,而核心语言似乎没有,所以我写了以下内容:
let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;
这似乎适用于正面但不适用于负面,引用:
这个表达式的类型为 float -> float 但在这里与 int 类型一起使用
我的逻辑有什么错误?
【问题讨论】:
标签:
floating-point
ocaml
absolute-value
【解决方案1】:
核心语言确实有一个,abs_float。
此外,您可以使用~-. 来表示一元否定,这也适用于整数以及~- 运算符。您可以像这样定义这样的运算符(即使它已经存在):
let (~-) a : int = 0 - a
let (~-.) a : float = 0.0 -. a
【解决方案2】:
当你输入时
absF -1.0;;
OCaml 将其解释为
(absF) - (1.0);;
即作为减法。相反,做
absF (-1.0);;
【解决方案3】:
如果你有 int 值可以使用
# abs(-1)
- : int = 1
如果你有一个浮点数
# abs_float(-1.0)
- : float = 1.