Floating point 核心OCaml中浮动的绝对值

Floating point 核心OCaml中浮动的绝对值,floating-point,ocaml,absolute-value,Floating Point,Ocaml,Absolute Value,我需要OCaml中的浮点绝对值函数,而核心语言似乎没有,所以我写了以下内容: let absF (f:float) = if f > 0.0 then f else (f *. -1.0);; 这似乎适用于积极因素,但不适用于消极因素,例如: 此表达式的类型为float->float,但此处与int类型一起使用 我的逻辑中有什么错误?键入时 absF -1.0;; OCaml将其解释为 (absF) - (1.0);; i、 作为减法。相反,你应该这样做 absF (-1.0);;

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

let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;
这似乎适用于积极因素,但不适用于消极因素,例如:

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

我的逻辑中有什么错误?

键入时

absF -1.0;;
OCaml将其解释为

(absF) - (1.0);;
i、 作为减法。相反,你应该这样做

absF (-1.0);;

核心语言确实有一个,
abs\u float

此外,您还可以使用
~.
表示一元求反,这也适用于使用
~-
运算符的整数。您可以这样定义这样一个操作符(即使它已经存在):

let (~-) a : int = 0 - a
let (~-.) a : float = 0.0 -. a

如果有int值,可以使用

# abs(-1)
- : int = 1
否则,如果你有一个浮动

# abs_float(-1.0)
- : float = 1.