round
Haskell中的函数有官方规范吗?在 GHCi 7.0.3 版中,我看到以下行为:
ghci> round (0.5 :: Double)
0
ghci> round (1.5 :: Double)
2
由于 0.5 和 1.5 都可以精确地表示为浮点数,我希望看到与 Python 中相同的行为:
>>> round(0.5)
1.0
>>> round(1.5)
2.0
这种差异有什么理由吗,还是 GHCi 的怪癖?
round
Haskell中的函数有官方规范吗?在 GHCi 7.0.3 版中,我看到以下行为:
ghci> round (0.5 :: Double)
0
ghci> round (1.5 :: Double)
2
由于 0.5 和 1.5 都可以精确地表示为浮点数,我希望看到与 Python 中相同的行为:
>>> round(0.5)
1.0
>>> round(1.5)
2.0
这种差异有什么理由吗,还是 GHCi 的怪癖?
它在规范中。您可以在 Haskell 报告的第 6.4.6 节中看到它:
round x
返回最接近的整数x
,如果x
两个整数之间等距,则返回偶数。
正如@dflemstr所指出的,这符合IEEE Standard for Floating-Point Arithmetic。