F# 有内置的立方根函数吗?我知道我可以使用求幂来计算立方根,但在我的情况下它不会进行类型检查,因为我想获取浮点类型数量的立方根并得到一个浮点数。
问问题
687 次
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 回答