Округление чисел

Haskell:
Округление чисел

Как:

Haskell использует функции round, ceiling, floor и truncate из Prelude для операций округления.

import Prelude

main :: IO ()
main = do
  let num = 3.567
  print $ round num    -- 4
  print $ ceiling num  -- 4
  print $ floor num    -- 3
  print $ truncate num -- 3
  
  -- Округление до указанного десятичного знака в Prelude не предусмотрено.
  -- Вот пользовательская функция:
  let roundTo n f = (fromInteger $ round $ f * (10^n)) / (10.0^^n)
  print $ roundTo 1 num -- 3.6

Подробнее

Исторически, округление имеет большое значение в численном анализе и информатике, поскольку оно критически важно для минимизации накопления ошибок в вычислениях, особенно до того, как представления чисел с плавающей точкой были стандартизированы согласно IEEE 754.

Как округлять? round направляет к ближайшему целому числу — вверх или вниз. ceiling и floor всегда округляют вверх или вниз до ближайшего целого числа соответственно, в то время как truncate просто отбрасывает десятичные точки.

Альтернативы этим функциям могут включать в себя пользовательскую логику, как наш roundTo, или вы можете подключить библиотеки (например, Data.Fixed) для более сложных требований.

Будьте осторожны с неожиданными результатами из-за того, как Haskell обрабатывает случаи, находящиеся ровно посередине при использовании round (округляет до ближайшего четного числа).

Смотрите также