OCaml核心中浮点数的绝对值

9

我需要一个OCaml中的浮点数绝对值函数,但是核心语言似乎没有,所以我编写了以下代码:

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

似乎对于正数可以工作但对于负数不行,引用:

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

我的逻辑中有什么错误?

3个回答

15

核心语言确实有一个 abs_float 函数。

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

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

11

当你输入时

absF -1.0;;

OCaml会将其解释为

(absF) - (1.0);;

也就是说,作为减法。相反,请执行:

absF (-1.0);;

5

如果你有一个整数值,可以使用:

# abs(-1)
- : int = 1

如果您有一个浮点数,则可以使用 else if

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

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