float32 vs single和float vs double之间的区别是什么,如果有的话



我一直认为类型float32single是可互换的,因为它们是类型别名。floatdouble也一样。然而,它们似乎是在不同的程序集Microsoft.FSharp.Core.OperatorsMicrosoft.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 

它们都只是相应CLR类型的别名,您可以在prim-types-prelude.fs中看到。

    type float32 = System.Single
    type float = System.Double
    type single = System.Single
    type double = System.Double

对于令人困惑的签名,请考虑如下:

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。

最新更新