float32 vs single和float vs double之间有什么区别?

时间:2016-09-15 17:42:25

标签: f# double type-alias

我一直认为类型float32single可以互换,因为它们是类型别名。 floatdouble也是如此。但是,它们似乎在不同的程序集Microsoft.FSharp.Core.Operators vs Microsoft.FSharp.Core.ExtraTopLevelOperators中声明。

此外,弹出式说明略有不同,F#在float32float上表示可以使用字符串并在其上使用Parse()

但是,尝试使用singledouble也可以成功:

let x = single "12.3"
let y = double "13.4"

我应该注意哪些差异?我总是互换地使用它们,从来没有真正考虑过它,直到我看到弹出窗口和签名中的差异:

// on hovering, or in FSI, this will have the slightly confusing signature:
// val x: a: double -> float
let x (a: double) = float a 

1 个答案:

答案 0 :(得分:3)

所有这些只是相应CLR类型的别名,如prim-types-prelude.fs所示。

至于令人困惑的签名,请考虑一下:

type typA = A;;

type typB = typA;;

let f (x : typA) = (x : typB)
//val f : x:typA -> typB

似乎F#更喜欢在你(或其他一些定义)使用它们的地方使用别名。

最后,您引用的名称空间(FSharp.Core.Operators)不是指float 类型,而是float 函数float : 'T -> float)。请参阅prim-types.fs

相关问题