9

我需要 OCaml 中浮点数的绝对值函数,而核心语言似乎没有,所以我写了以下内容:

let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;

这似乎适用于积极因素,但不适用于消极因素,理由是:

此表达式的类型为 float -> float 但此处与 int 类型一起使用

我的逻辑有什么错误?

4

3 回答 3

14

核心语言确实有一个,abs_float.

此外,您可以使用~-.来表示一元否定,这也适用于整数以及~-运算符。您可以像这样定义这样的运算符(即使它已经存在):

let (~-) a : int = 0 - a
let (~-.) a : float = 0.0 -. a
于 2009-03-20T20:01:38.030 回答
11

当您键入

absF -1.0;;

OCaml 将其解释为

(absF) - (1.0);;

即作为减法。相反,做

absF (-1.0);;
于 2009-03-20T17:47:35.653 回答
4

如果你有 int 值可以使用

# abs(-1)
- : int = 1

否则,如果你有一个浮动

# abs_float(-1.0)
- : float = 1.
于 2015-11-20T16:46:06.473 回答