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
(округлює до найближчого парного числа).
Див. також
- Документація Haskell Prelude для функцій округлення: https://hackage.haskell.org/package/base-4.16.1.0/docs/Prelude.html
- Haskell Wiki про арифметику плаваючої коми: https://wiki.haskell.org/Floating_point_arithmetic
- Стандарт IEEE 754-2008 для більш детальної інформації про те, як обробляється плаваюча кома у багатьох мовах: https://ieeexplore.ieee.org/document/4610935