circumference :: Float -> Float
circumference r = 2 * pi * r
ghci> circumference 4.0
25.132742
circumference' :: Double -> Double
circumference' r = 2 * pi * r
ghci> circumference' 4.0
25.132741228718345
我在Haskell中对此进行了测试。
此处Float类型的精度为6位数字。 Double类型的精度为15位数字。 Double类型的精度显然是Float类型的两倍以上。说Double类型是真正的浮点数还是Float类型的精度的两倍还正确吗?
答案 0 :(得分:4)
正如卡尔在评论中说的那样,它更多的是一个IEEE-754问题,而不是一个Haskell问题。
该标准使精度和尾数位有所不同。精度是用于对数字进行编码的位数。
每个IEEE-754数字由三个元素组成:一个符号,一个指数和一个尾数。
如果符号始终为1位,则将精度加倍或翻倍时,尾数和指数位将不按比例进行位计数:
您还应该注意,您正在比较十进制表示的精度。 IEEE-754数字从根本上讲是二进制数字(存在十进制数字,但这是另一回事了):
进一步: