如何构建float <meter>?</meter>的列表

时间:2013-08-12 02:49:29

标签: f#

通常,当我需要构建一个从0到10的列表时,我只需这样做:[0..10]。这给了我一个从0到10的整数列表。但这次我需要一个从0到10的浮点列表。有没有办法做到这一点?

let testFunc (x: float<metre>) = 
    x

let otherTestFunc =
    [0.0 .. 10.0] // How do I make this return float<metre>
    |> List.map (fun x -> testFunc x)

2 个答案:

答案 0 :(得分:5)

我刚刚向F#团队报告了这个问题,但您需要在使用Measures时手动指定步骤。

let testFunc (x: float<metre>) = 
    x

let otherTestFunc =
    [0.0 <metre> .. 1.0<metre> .. 10.0 <metre>] // How do I make this return float<metre>
    |> List.map (fun x -> testFunc x)

答案 1 :(得分:3)

浮点循环可能很危险,因为它们隐藏了累积的舍入错误。有关详细信息,请参阅F# Floating point ranges are experimental and may be deprecated

我相信,最简单的方法是将循环保持在一个简单的非测量int中,然后在循环中转换该值。

let otherTestFunc =
    [0 .. 10]
    |> List.map (float >> (*) 1.0<metre>)
    |> List.map testFunc