1

F# 有内置的立方根函数吗?我知道我可以使用求幂来计算立方根,但在我的情况下它不会进行类型检查,因为我想获取浮点类型数量的立方根并得到一个浮点数。

4

1 回答 1

4

我不认为有一个内置函数可以用测量单位计算立方根(我假设它会在原始运算符模块sqrt,其他模块在哪里),所以我认为唯一的选择是使用求幂。

但是,您可以在没有单位的情况下使用幂运算,并将单位不安全操作包装在一个添加单位的函数中,这样您就可以获得具有正确单位的函数:

let cuberoot (f:float<'m^3>) : float<'m> = 
  System.Math.Pow(float f, 1.0/3.0) |> LanguagePrimitives.FloatWithMeasure

请注意,F# 不支持小数单位,因此您可以编写cuberoot (10.0<m^3>)or cuberoot (10.0<m^9>),但如果您编写cuberoot (10.0<m>),它将不会进行类型检查,因为结果将是米到1/3(这是一个小数单位)。

此示例仅cuberoot针对float. 如果您想编写与其他数字类型一起使用的重载函数(我想您可能需要float32),那么它会变得有点丑陋(所以除非必要,否则我不建议这样做),但是您可以使用具有多个重载的中间类型的技巧,例如,例如,在这个答案中。

于 2013-01-15T20:30:52.363 回答