2013-01-15 31 views
1

F#是否具有內置的立方體根函數?我知道我可以使用指數計算cuberoots,但它不會在我的情況下輸入check,因爲我想要獲取float類型的cuberoot並獲得一個float。F#立方體根單位的度量值

回答

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(這是一個分數單位)。

此示例僅針對float實施cuberoot。如果你想寫重載函數,與其他數字類型(我猜你可能需要float32),那麼它變得有點醜陋的作品(所以我不建議,除非必要),但你可以使用一個技巧是中間型與多個重載例如,在this answer中。

+0

感謝您的回答。這有點令人失望,但我可以接受這個解決方案。 – jz87

+2

IMO使用LanguagePrimitives.FloatWithMeasure代替unbox會更具描述性(和-1拳擊操作) – desco

+0

@desco好點,謝謝!使用FloatWithMeasure絕對是一個更好的選擇。我更新了答案。 –