Numerojen pyöristäminen

Haskell:
Numerojen pyöristäminen

Kuinka:

Haskell käyttää round, ceiling, floor ja truncate funktioita Preludesta pyöristysoperaatioihin.

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
  
  -- Tietyn desimaalipaikan pyöristäminen ei sisälly Preludeen.
  -- Tässä on räätälöity funktio:
  let roundTo n f = (fromInteger $ round $ f * (10^n)) / (10.0^^n)
  print $ roundTo 1 num -- 3.6

Syväsukellus

Historiallisesti pyöristäminen on merkittävää numeerisessa analyysissä ja tietojenkäsittelytieteessä, koska se on välttämätöntä virheiden kertymisen minimoinnissa laskutoimituksissa, erityisesti ennen kuin liukulukuesitykset standardoitiin IEEE 754:n kanssa.

Mihin pyöristetään? round vie lähimpään kokonaislukuun—yös tai alas. ceiling ja floor pyöristävät aina ylös tai alas lähimpään kokonaislukuun, kun taas truncate vain pudottaa desimaalipisteet.

Näiden funktioiden vaihtoehtoihin saattaa sisältyä räätälöity logiikka, kuten meidän roundTo, tai saatat ottaa käyttöön kirjastoja (kuten Data.Fixed) monimutkaisempien vaatimusten varalle.

Varo odottamattomia tuloksia johtuen siitä, miten Haskell käsittelee puolivälin tapauksia round-funktiossa (se pyöristää lähimpään parilliseen numeroon).

Katso Myös