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