我需要一个OCaml中的浮点数绝对值函数,但是核心语言似乎没有,所以我编写了以下代码:
let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;
似乎对于正数可以工作但对于负数不行,引用:
此表达式的类型为float -> float,但在此处使用类型为int
我的逻辑中有什么错误?
我需要一个OCaml中的浮点数绝对值函数,但是核心语言似乎没有,所以我编写了以下代码:
let absF (f:float) = if f > 0.0 then f else (f *. -1.0);;
似乎对于正数可以工作但对于负数不行,引用:
此表达式的类型为float -> float,但在此处使用类型为int
我的逻辑中有什么错误?
核心语言确实有一个 abs_float
函数。
此外,您可以使用 ~-.
表示一元取反运算,对于整数也适用 ~-
运算符。您可以像这样定义这样的运算符(尽管它已经存在):
let (~-) a : int = 0 - a
let (~-.) a : float = 0.0 -. a
当你输入时
absF -1.0;;
OCaml会将其解释为
(absF) - (1.0);;
也就是说,作为减法。相反,请执行:
absF (-1.0);;
如果你有一个整数值,可以使用:
# abs(-1)
- : int = 1
如果您有一个浮点数,则可以使用 else if
# abs_float(-1.0)
- : float = 1.