נקודה צפה
נקודה צפה היא שיטה לייצוג מספרים ממשיים, המאזנת, תוך התחשבות במקום מוגבל המוקצב לרישום המספר, בין הצורך לרשום טווח רחב של מספרים לצורך לרשום מספרים בדיוק רב. השיטה יעילה גם לרישום מספרים גדולים מאוד או קטנים מאוד.
השם "נקודה צפה" מציין את העובדה שבשיטת ייצוג זו, מספר הספרות משמאל לנקודה העשרונית ומימין לה גמיש, בהתאם למספר המיוצג (להבדיל מייצוג בשיטת נקודה קבועה, שבו מספר הספרות בכל אחד מצידי הנקודה העשרונית קבוע).
שיטת הנקודה הצפה היא שיטה מקובלת לייצוג מספרים במחשב, המאפשרת לרשום בזיכרון מחשב בגודל נתון מספרים גבוהים בהרבה מאלו הניתנים לרישום בגודל זיכרון זה בשיטת נקודה קבועה, במחיר ויתור על רמת הדיוק של המספר, ויתור שעשוי להיות פחות קריטי כאשר מדובר במספרים גדולים מאוד - הוויתור הוא על הספרות הפחות משמעותיות של המספר.
ייצוג בנקודה צפה
[עריכת קוד מקור | עריכה]מספר רציונלי מיוצג בשיטת הנקודה הצפה על ידי מכפלת מספר שלם או שבר, הנקרא מנטיסה בבסיס בחזקת מעריך.
המספר a מיוצג כ- כאשר:
- m היא המנטיסה. המנטיסה מיוצגת בדרך כלל באמצעות שבר בשיטת נקודה קבועה, אך היא יכולה להיות גם שלם, המנטיסה נמצאת בדרך כלל בין 1 ל-b.
- b הוא הבסיס. הבסיס הוא מספר שלם קבוע, ואינו חלק מהייצוג המסוים של a, אלא חלק מאופן הייצוג. מקובל להשתמש בבסיס 2 עבור מחשבים ובבסיס 10 עבור הצגה אנושית טבעית.
- e הוא המעריך (אקספוננט). המעריך מיוצג באמצעות מספר שלם.
לפי תקן ה-IEEE קיימים ערכים מיוחדים כגון אינסוף ו-NaN (לא מספר - Not a Number). לא בכל המחשבים מיוצגים ערכים אלו באותה צורה בינארית. לרוב, גם האפס מיוצג כערך מיוחד, מכיוון שהוא המספר היחיד בעל אקספוננט 0, ולכן אין הכרח לאפשר ערך 0 בייצוג המנטיסה. לעיתים קיימים שני ערכים: 0+ ו-0-.
אופן ייצוג מסוים בנקודה צפה מורכב מבסיס שלם, מאופנים לייצוג המנטיסה והמעריך ומאוסף ערכים מיוחדים. יצוג ערך בנקודה צפה מתאים לכתיב מדעי והנדסי מקורב של מספרים גדולים מאוד וקטנים מאוד. האקספוננט מייצג את סדר הגודל של הערך, והמנטיסה מייצגת את הספרות המשמעותיות שלו.
דוגמאות:
- מהירות האור היא 299,792,458 מטר לשנייה. ניתן לרשום ערך זה גם בקירוב כ-2.99×108. בצורת הרישום הראשונה נעשה שימוש ב-9 ספרות, ואילו בצורת הרישום השנייה ב-4 ספרות, כלומר נחסך מקום בזיכרון במחיר של הקטנת הדיוק.
- 1012 × 1.78 = 1,780,000,000,000
- 10-12 × 1.78 = 0.00000000000178
- 239 × 1.52 = 835,628,837,109.76
- 101 × 4.8 = 48
- 25 × 1.5 = 48
פעולות על מספרים בשיטת הנקודה הצפה
[עריכת קוד מקור | עריכה]כפל - כל אחד מהפרמטרים יעודכנו בהתאם לתנאים הבאים:
- סימן - אם אחד הערכים שלילי התוצאה שלילית, אחרת חיובית.
- אקספוננט - חיבור המעריכים.
- מנטיסה - כפל בינארי בין המנטיסות.
תכונות הכפל:
- סגירות תחת כפל (עלול להיגרם מצב של אינסוף \ NaN).
- קומוטטיבי (A×B=B×A)
- לא אסוציאטיבי - עלול לגרום לגלישה.
חיבור - כל אחד מהפרמטרים יעודכנו בהתאם לתנאים הבאים:
- אקספוננט - המספר הקטן ביותר נכתב בצורה כזו שהמעריכים יהיו שווים.
- מנטיסה - חיבור בינארי של המנטיסות.
- נורמליזציה - הזזת הנקודה העשרונית והגדלת\הקטנת המעריך בהתאם.
תכונות החיבור:
- סגירות תחת חיבור (עלול להיגרם מצב של אינסוף \ NaN).
- קומוטטיבי (A+B=B+A)
- לא אסוציאטיבי - עלול לגרום לגלישה.
בעיות בייצוג נקודה צפה
[עריכת קוד מקור | עריכה]אי-דיוק ושגיאות עיגול
[עריכת קוד מקור | עריכה]אחת הבעיות המרכזיות של שיטת הנקודה הצפה היא אי-דיוק, כיוון שבבסיס 2 לא ניתן לסמן במדויק שבר שהמחלק שלו מורכב מגורמים נוספים. למשל, ניתן לייצג בבסיס 2 רבע במדויק, אבל המספר 0.1 לא יכול להיות מיוצג באופן מדויק לפי בסיס 2 (בעיה זו קיימת גם בייצוג בשיטת הנקודה הקבועה בבסיס 2). המספרים שלא ניתנים לייצוג מדויק מיוצגים בעזרת עיגול. למשל, בשפות תכנות שמשתמשות בשיטה זאת (כגון שפת C), 0.1 + 0.2 = 0.30000000000000004 (במקום 0.3).[1]
בניגוד לשיטת הנקודה הקבועה, שבה שגיאת העיגול הגדולה ביותר קבועה, בשיטת הנקודה הצפה שגיאת העיגול גדלה ככל שהמעריך גדל. ערכה של שגיאת העיגול הוא המנטיסה הקטנה ביותר שניתנת לייצוג כפול הבסיס בחזקת המעריך. כדי להקטין ככל האפשר את שגיאת העיגול יש להקטין את המעריך לקטן ביותר האפשרי. ייצוג בנקודה צפה בעזרת המעריך הקטן ביותר האפשרי באופן הייצוג המסוים נקרא מנורמל. בדרך כלל אופן הייצוג של המנטיסה מאפשר רק ייצוג מנורמל.
מידת אי-הדיוק עלולה לגדול ככל שמבוצעות פעולות נוספות על המספר.
ספיגה
[עריכת קוד מקור | עריכה]תוצאת פעולה בין מספר גדול מאוד ומספר קטן מאוד יכולה להיות שונה מהמספר הגדול מאוד בפחות מרמת אי-הדיוק. למשל, ייתכן שבאופן ייצוג מסוים 1099 = 1 + 1099. במקרה כזה, המספר הגדול "סופג" את המספר הקטן לתוכו.
תכונה זו גורמת לכך שתכונות אריתמטיות מוכרות כגון חוק הקיבוץ וחוק הפילוג לא תקפות בייצוג בנקודה צפה. לכן, ישנה חשיבות לסדר הפעולות, ושני ביטויים זהים לכאורה יפיקו תוצאות שונות. למשל, 1- = 1 - (1099 - 1099) לעומת 0 = (1 - 1099) - 1099.
גלישה וחמיקה
[עריכת קוד מקור | עריכה]פעולה על מספרים בנקודה צפה עלולים לגרום לגלישה (overflow) אם מעריך התוצאה גדול מהניתן לייצוג. במקרה כזה, התוצאה תהיה בדרך כלל אינסוף (חיובי או שלילי).
כאשר תוצאת פעולה על מספרים בנקודה צפה היא בעלת מעריך קטן מהניתן לייצוג נגרמת חמיקה (underflow). במקרה כזה, התוצאה תהיה סימון מיוחד למספר שונה מ-0 אבל קטן (אם חיובי) או גדול (אם שלילי) מכל מספר חיובי או שלילי אחר.
פעולה לא חוקית
[עריכת קוד מקור | עריכה]כאשר מבוצעת פעולה לא חוקית, למשל שורש ריבועי של מספר שלילי, התוצאה תהיה NaN לפי תקן ה-IEEE.
נקודה צפה במחשב
[עריכת קוד מקור | עריכה]בזכות האפשרות לייצוג מספרים באופן ספרתי, שיטת הנקודה הצפה היא שיטה מקובלת לייצוג מספרים במחשב (בנוסף לייצוג מספרים בנקודה קבועה). מרבית המחשבים המודרניים מממשים את תקן IEEE 754 לייצוג בנקודה צפה.
יתרונו העיקרי של ייצוג בנקודה צפה על-פני ייצוג בנקודה קבועה הוא היכולת לייצג טווח רחב הרבה יותר של מספרים (בגודל נתון של מילה), הנחוץ בחישובים במספרים גדולים מאוד, או קרובים מאוד לאפס. במחשב "גולם א", למשל, היה גודל מילה גדול במיוחד של 75 סיביות, והחומרה ביצעה חישובים בשיטת נקודה צפה, שבה סיבית אחת לסימן, 10 סיביות למעריך ו־64 סיביות למנטיסה. כך יכלו לייצג מספרים שגודלם עד 21024 × 263, לעומת ייצוג מספרים שגודלם עד 274 בלבד בייצוג בנקודה קבועה.
חישובים במחשבי-על נעשים בדרך כלל באריתמטיקה של נקודה צפה, ולכן מהירותם של מחשבי-על נמדדת ב-FLOPS (קיצור של FLoating point Operations Per Second).
בזיכרון המחשב נקודה צפה נשמרת בשיטת סדר בתים כאשר כל 8 ביטים צמודים נשמרים בכתובת מסוימת בסדר מסוים.
גדלים
[עריכת קוד מקור | עריכה]לאחסון מספרים בנקודה צפה מקובלים גדלים אחדים:
- חצי דיוק (Half-precision): המספר מאוחסן בשני בתים שבהם 16 סיביות.
- דיוק רגיל (Single-precision): המספר מאוחסן במילה בת 32 סיביות.
- דיוק כפול (Double-precision): המספר מאוחסן במילה כפולה בת 64 סיביות.
- דיוק מרובע (Quadruple-precision): המספר מאוחסן בארבע מילים שבהן 128 סיביות.
- דיוק מתומן (Octuple-precision): המספר מאוחסן בשמונה מילים שבהן 256 סיביות.
הגדלת הדיוק מאפשרת להגדיל גם את המנטיסה וגם את המעריך. ככל שהדיוק גדול יותר מהירות ביצוע פעולות אריתמטיות קטנה יותר, כך שעל המתכנת לבחור מידת דיוק בהתאם לחשיבות המיוחסת לדיוק לעומת זמן ביצוע.
ראו גם
[עריכת קוד מקור | עריכה]קישורים חיצוניים
[עריכת קוד מקור | עריכה]הערות שוליים
[עריכת קוד מקור | עריכה]- ^ הסבר קצר של התופעה באנגלית, באתר 0.30000000000000004.com