Haskell:
Afronden van getallen
Hoe:
Haskell gebruikt de functies round
, ceiling
, floor
en truncate
uit de Prelude
voor afrondingsbewerkingen.
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
-- Afronden naar een specifieke decimale plaats zit niet in Prelude.
-- Hier is een aangepaste functie:
let roundTo n f = (fromInteger $ round $ f * (10^n)) / (10.0^^n)
print $ roundTo 1 num -- 3.6
Diepere Duik
Historisch gezien is afronden belangrijk in numerieke analyse en informatica omdat het cruciaal is om accumulatie van fouten in berekeningen te minimaliseren, vooral voordat drijvende-kommavoorstellingen werden gestandaardiseerd met IEEE 754.
Waar naar af te ronden? round
brengt je naar het dichtstbijzijnde geheel getal—omhoog of omlaag. ceiling
en floor
ronden altijd omhoog of omlaag af naar het dichtstbijzijnde geheel getal, terwijl truncate
simpelweg de decimalen laat vallen.
Alternatieven voor deze functies kunnen aangepaste logica inhouden, zoals onze roundTo
, of je zou bibliotheken kunnen gebruiken (zoals Data.Fixed) voor complexere vereisten.
Pas op voor onverwachte resultaten door hoe Haskell halverwege gevallen in round
behandelt (het rondt af naar het dichtstbijzijnde even getal).
Zie Ook
- Haskell Prelude documentatie voor afrondingsfuncties: https://hackage.haskell.org/package/base-4.16.1.0/docs/Prelude.html
- De Haskell Wiki over drijvendekommagetallen rekenkunde: https://wiki.haskell.org/Floating_point_arithmetic
- IEEE 754-2008 standaard voor meer informatie over hoe drijvendekommagetallen worden behandeld in veel talen: https://ieeexplore.ieee.org/document/4610935