舍入到最接近的整数

Chr*_*lor 21 floating-point haskell

roundHaskell中有关于该函数的官方规范吗?在GHCi版本7.0.3中,我看到以下行为:

ghci> round (0.5 :: Double)
0
ghci> round (1.5 :: Double)
2
Run Code Online (Sandbox Code Playgroud)

由于0.5和1.5都可以完全表示为浮点数,我希望看到与Python中相同的行为:

>>> round(0.5)
1.0
>>> round(1.5)
2.0
Run Code Online (Sandbox Code Playgroud)

是否存在差异的理由,还是GHCi的怪癖?

evi*_*bag 23

它在规范中.您可以在Haskell报告的 6.4.6节中看到它:

round x返回最接近的整数x,如果x两个整数之间是等距的,则返回偶数.

正如@dflemstr所指出的,这符合IEEE浮点运算标准.

  • 这是根据IEEE 754浮点舍入模式标准. (4认同)
  • FWIW,为了比较,python round()是一个围绕C99 round()函数的包装器,它在C99附件F轮之后的实现上与零相关联. (2认同)