От округленного до ближайшего целого
Есть ли официальная спецификация функции 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?
Ответы
Ответ 1
Это в спецификации. Вы можете увидеть это в разделе 6.4.6 отчет Haskell:
round x
возвращает ближайшее целое число x
, четное целое, если x
равно эквидистант между двумя целыми числами.
Как указано @dflemstr, это соответствует IEEE Standard for Floating Арифметика -Point.