F#是否具有内置的多维数据集根函数?我知道我可以使用取幂来计算cuberoots,但它不会在我的情况下键入check,因为我想采用float类型的cuberoot并得到一个浮点数。
答案 0 :(得分:4)
我认为没有内置函数来计算具有度量单位的多维数据集根(我假设它将位于primitive operators module sqrt
其他地方),所以我认为唯一的选择是使用取幂。
但是,您可以在没有单位的情况下使用取幂,并将单位不安全操作包含在添加单位的函数中,这样您就可以获得具有正确单位的函数:
let cuberoot (f:float<'m^3>) : float<'m> =
System.Math.Pow(float f, 1.0/3.0) |> LanguagePrimitives.FloatWithMeasure
请注意,F#不支持fractional units,因此您可以编写cuberoot (10.0<m^3>)
或cuberoot (10.0<m^9>)
,但如果您编写cuberoot (10.0<m>)
,则不会进行类型检查,因为结果将是米到1/3
(这是一个小数单位)。
此示例仅针对cuberoot
实施float
。如果你想编写与其他数字类型兼容的重载函数(我猜你可能需要float32
)那么它会变得有点丑陋(所以除非必要,我不建议这样做),但你可以使用中间技巧输入多次重载,例如this answer。