核心 OCaml 中浮点数的绝对值

Posted

技术标签:

【中文标题】核心 OCaml 中浮点数的绝对值【英文标题】:Absolute value for floats in core 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 类型一起使用

我的逻辑有什么错误?

【问题讨论】:

【参考方案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.

【讨论】:

以上是关于核心 OCaml 中浮点数的绝对值的主要内容,如果未能解决你的问题,请参考以下文章

shell中浮点数运算

c语言“输入一个浮点数,输出它的绝对值,保留两位小数。”求解

js中浮点数的精度问题

python中浮点数的最小值

python 浮点数取绝对值

为啥复数的绝对值是浮点数?