F#cube root度量单位

时间:2013-01-15 20:10:44

标签: f#

F#是否具有内置的多维数据集根函数?我知道我可以使用取幂来计算cuberoots,但它不会在我的情况下键入check,因为我想采用float类型的cuberoot并得到一个浮点数。

1 个答案:

答案 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