代码之家  ›  专栏  ›  技术社区  ›  Mat Kelly

核心OCAML中浮点数的绝对值

  •  7
  • Mat Kelly  · 技术社区  · 17 年前

    我需要一个OCAML中的浮点的绝对值函数,而核心语言似乎不具备该函数,所以我写了以下内容:

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

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

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

    我的逻辑错误是什么?

    3 回复  |  直到 10 年前
        1
  •  10
  •   newacct    14 年前

    当你打字的时候

    absF -1.0;;
    

    OCAML解释为

    (absF) - (1.0);;
    

    即减法。相反,做

    absF (-1.0);;
    
        2
  •  13
  •   nlucaroni    15 年前

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

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

    let (~-) a : int = 0 - a
    let (~-.) a : float = 0.0 -. a
    
        3
  •  2
  •   daniele3004    10 年前

    如果您有int值,可以使用

    # abs(-1)
    - : int = 1
    

    如果你有浮球

    # abs_float(-1.0)
    - : float = 1.
    
    推荐文章