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

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 (округлює до найближчого парного числа).

Див. також