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 (הוא מעגל למספר הזוגי הקרוב ביותר).

ראה גם