נקודה צפה

נקודה צפה (באנגלית: Floating-point) היא שיטה לייצוג מספרים ממשיים, המאזנת, תוך התחשבות במקום המוגבל המוקצב לרישום המספר, בין הצורך לרשום טווח רחב של מספרים לצורך לרשום מספרים בדיוק רב. השיטה יעילה גם לרישום מספרים גדולים מאוד או קטנים מאוד. השם "נקודה צפה" מציין את העובדה שבשיטת ייצוג זו, מספר הספרות משמאל לנקודה העשרונית ומימין לה גמיש, בהתאם למספר המיוצג (להבדיל מייצוג בשיטת נקודה קבועה, שבו מספר הספרות בכל אחד מצידי הנקודה העשרונית קבוע). שיטת הנקודה הצפה היא שיטה מקובלת לייצוג מספרים במחשב, והיא מאפשרת לרשום בזיכרון בגודל נתון (למשל 64 ביטים) מספרים הרבה יותר גדולים מאשר שניתן לרשום בגודל זיכרון זה בנקודה קבועה, וזאת במחיר ויתור על רמת הדיוק של המספר (ויתור שאינו קריטי כאשר מדובר במספרים גדולים מאוד - הוויתור הוא על הספרות הפחות משמעותיות של המספר). דוגמה: מהירות האור היא 299,792,458 מטר לשנייה. ניתן לרשום ערך זה גם בקירוב כ-‎2.99×108. בצורת הרישום הראשונה נזקקנו ל-9 ספרות, ואילו בצורת הרישום השנייה נזקקנו רק ל-4 ספרות (ניתן להתעלם מהמספר 10, כי ידוע שאנו בשיטה העשרונית), כלומר חסכנו זיכרון במחיר של הקטנת הדיוק. מספר רציונלי מיוצג בשיטת הנקודה הצפה על ידי מכפלת מספר שלם או שבר, הנקרא מנטיסה בבסיס בחזקת מעריך. המספר a מיוצג כ- a = m b e {\displaystyle a=mb^{e}} כאשר: m היא המנטיסה. המנטיסה מיוצגת בדרך כלל באמצעות שבר בשיטת נקודה קבועה, אך היא יכולה להיות גם שלם, המנטיסה נמצאת בדרך כלל בין 1 ל-b. b הוא הבסיס. הבסיס הוא מספר שלם קבוע, ואינו חלק מהייצוג המסוים של a, אלא חלק מאופן הייצוג. מקובל להשתמש בבסיס 2 עבור מחשבים ובבסיס 10 עבור הצגה אנושית טבעית. e הוא המעריך (אקספוננט). המעריך מיוצג באמצעות מספר שלם. לפי תקן ה-IEEE קיימים ערכים מיוחדים כגון אינסוף ו-NaN (לא מספר - Not a Number). לא בכל המחשבים מיוצגים ערכים אלו באותה צורה בינארית. לרוב, גם האפס מיוצג כערך מיוחד, מכיוון שהוא המספר היחיד בעל אקספוננט 0, ולכן אין הכרח לאפשר ערך 0 בייצוג המנטיסה. לעיתים קיימים שני ערכים: 0+ ו-0-. אופן ייצוג מסוים בנקודה צפה מורכב, אם כן, מבסיס שלם, מאופנים לייצוג המנטיסה והמעריך ומאוסף ערכים מיוחדים. דוגמאות: 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 יצוג ערך בנקודה צפה מתאים לכתיב מדעי והנדסי מקורב של מספרים גדולים מאוד וקטנים מאוד. האקספוננט מייצג את סדר הגודל של הערך, והמנטיסה מייצגת את הספרות המשמעותיות שלו. למשל, מהירות האור היא 299,792,458 מטר לשנייה, ערך זה ניתן לרשום גם בקירוב כ-‎2.99×108, כלומר סדר הגודל הוא 108 מטרים לשנייה ויש כ־2.99 יחידות מסדר גודל זה. כפל - כל אחד מהפרמטרים יעודכנו בהתאם לתנאים הבאים: סימן - אם אחד הערכים שלילי התוצאה שלילית, אחרת חיובית. אקספוננט - חיבור המעריכים. מנטיסה - כפל בינארי בין המנטיסות. תכונות הכפל: סגירות תחת כפל (עלול להיגרם מצב של אינסוף \ 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). בניגוד לשיטת הנקודה הקבועה, שבה שגיאת העיגול הגדולה ביותר קבועה, בשיטת הנקודה הצפה שגיאת העיגול גדלה ככל שהמעריך גדל. ערכה של שגיאת העיגול הוא המנטיסה הקטנה ביותר שניתנת לייצוג כפול הבסיס בחזקת המעריך. כדי להקטין ככל האפשר את שגיאת העיגול יש להקטין את המעריך לקטן ביותר האפשרי. ייצוג בנקודה צפה בעזרת המעריך הקטן ביותר האפשרי באופן הייצוג המסוים נקרא מנורמל. בדרך כלל אופן הייצוג של המנטיסה מאפשר רק ייצוג מנורמל. מידת אי-הדיוק עלולה לגדול ככל שמבוצעות פעולות נוספות על המספר. תוצאת פעולה בין מספר גדול מאוד ומספר קטן מאוד יכולה להיות שונה מהמספר הגדול מאוד בפחות מרמת אי-הדיוק. למשל, ייתכן שבאופן ייצוג מסוים 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 ביטים צמודים נשמרים בכתובת מסוימת בסדר מסוים. אנליזה נומרית שיטות ספירה שמות מספרים נקודה קבועה מחשב על מדיה וקבצים בנושא נקודה צפה בוויקישיתוף נקודה צפה, באתר MathWorld (באנגלית) הסבר קצר של התופעה באנגלית, באתר 0.30000000000000004.com