JavaRush /בלוג Java /Random-HE /מספרים אמיתיים בזיכרון המחשב. הֶסבֵּר.
Marianna
רָמָה
Москва

מספרים אמיתיים בזיכרון המחשב. הֶסבֵּר.

פורסם בקבוצה
אחר הצהריים טובים תוך כדי לימוד ההרצאה "ניואנסים של עבודה עם מספרים ממשיים" של הקווסט הראשון (סעיף 2. מבנה מספרי הנקודה הצפה) והרצאות נוספות בנושא, רבים בוודאי נתקלו בשאלות רבות בנושא זה. בתחילה, ניסיתי לתת לעצמי את התשובות הדרושות, וכעת אני מציע לך אותן כדי לעזור לך להבין באופן מלא בסדר הגיוני עקבי. 1. מערכות מספרים עשרוניות ובינאריות. 1.1 מערכת המספרים העשרוניים היא אחת המערכות הנפוצות ביותר; היא זו שבה אנו משתמשים עבור כל חישובים מתמטיים שאינם מחשבים בבית הספר, באוניברסיטה, בחיים. הוא משתמש במספרים 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (ערבית) - 10 ספרות בסך הכל. יש גם סימון רומאי למספרים, אשר, עם זאת, כמעט ואינו בשימוש כעת. בשיטה העשרונית הספירה מתבצעת ביחידות, עשרות, מאות, אלפים, עשרות אלפים, מאות אלפים, מיליונים וכו'. - במילים אחרות, אלו כל הספרות של המספר. הספרה של מספר היא המיקום (מקום) של הספרה ברשומת המספרים. הספרה הנמוכה ביותר של המספרים הטבעיים (והכי פחות משמעותית ) היא ספרת היחידות (הכי ימינה). למה הוא הכי לא משמעותי? מכיוון שעל ידי הפלת ספרת היחידה של מספר, המספר עצמו ישתנה באופן מינימלי (לדוגמה, המספרים 345 ו-340). לאחר מכן, הספרה השנייה היא ספרת העשרות וכו'. מה כל זה אומר? בואו ניקח כל מספר שלם במערכת העשרונית ונפרק אותו לספרות . 3297 = 3*1000 + 2*100 + 9*10 + 7 לפיכך, אנו מוצאים שהמספר 3297 מכיל 3 יחידות מהספרה הרביעית (כלומר, 3 אלף), 2 יחידות מהספרה השלישית (2 מאות), 9 יחידות מהספרה השנייה (9 עשרות) ו -7 יחידות מהספרה הראשונה . במילים אחרות, מספר זה הוא שלושת אלפים מאתיים תשעים ושבע והוא, בהתאם, מיקום . מה לגבי הספרות של מספרים שבריריים (אמיתיים) ? הספרות של מספרים שברים (החלק השברי שלהם) נקראות: עשיריות, מאיות, אלפיות, עשרת אלפים וכו'. ככל שהספרה רחוקה יותר מהנקודה העשרונית (מכל החלק של המספר), היא פחות משמעותית (אם זורקים אותה, ערך המספר ישתנה מעט). לדוגמה, ניקח כל מספר חלקי המוצג כעשרוני: 25.076 = 2*10 + 5 +0*0.1 + 7*0.01 +6*0.001 לפיכך, אנו מוצאים שמספר השבר 25.076 מכיל 2 עשיריות, 5 יחידות, 0 עשיריות , 7 מאיות ו 6 אלפים. המערכת העשרונית משתמשת ב-10 ספרות וכפולות של 10 מקומות - ומכאן השם "עשרוני". 1.2 מערכת מספרים בינארית היא מערכת מספרים המשמשת כמעט בכל המחשבים המודרניים ומכשירי מחשוב אלקטרוניים אחרים. כדי להקליט מספרים, הוא משתמש רק בשתי ספרות - 0 ו-1. כדי לא לבלבל באיזו מערכת מספרים המספר כתוב, הוא מסופק עם מחוון בפינה הימנית התחתונה (זהו הבסיס של מערכת המספרים ), עבור דוגמה: 1000₁₀ 1000₂ כאן המספר הראשון הוא האלף המוכר במערכת העשרונית, והתחתון הוא המספר בייצוג המערכת הבינארית והוא שווה בשיטה העשרונית... 8 ! כמו השיטה העשרונית, גם המערכת הבינארית מפרקת מספרים לספרות . כל ספרה במספר בינארי נקראת ביט (או ספרה ). (אם מישהו מעוניין, ארבע סיביות הן נגיסה (או טטרד), 8 סיביות הן בייט , 16 סיביות הן מילה , 32 סיביות הן מילה כפולה ). גם ביטים (ספרות) ממוספרים מימין לשמאל, החל מאפס (בניגוד למערכת העשרונית). לסיבית הכי פחות משמעותית, הכי פחות משמעותית, הימנית יש מספר רצף של 0 . לאחר מכן מגיע הביט הראשון , השני וכו', ככל שהביט ישן יותר , כך הוא משמעותי יותר (באנלוגיה לשיטה העשרונית אנו מבינים - אם תסיר את אלה מהמספר 1455, תישאר עם המספר 1450 - כמעט שווה להתחלה אבל אם תסיר את המאות תישאר עם המספר 1050 שזה כבר רחוק מהערך ההתחלתי, כי מקום המאות הרבה יותר משמעותי (מסדר גבוה) ממקום היחידות ). דוגמא. אל תקרא עדיין :))) מספרים אמיתיים בזיכרון המחשב.  בפיתוח!!!  - 2 בתחתית, הסיביות של המספר הבינארי השברי הזה ממוספרים באדום - בסך הכל יש לנו 18 סיביות (ספרות) של מספר זה. במבט קדימה, ברצוני לציין שמספרים שברים מאוחסנים בזיכרון המחשב בצורה שונה לחלוטין - על כך נדון בהמשך. בינתיים, בואו נלמד כיצד להמיר מספרים ממערכת מספרים אחת לאחרת. 2. המרת מספרים שלמים ושברים מהשיטה העשרונית למערכת הבינארית ולהיפך. 2.1 המרה מעשרוני לבינארי. 2.1.1 מספרים שלמים. על מנת להמיר מספר עשרוני שלם למערכת המספרים הבינארית, עליך לחלק את המספר הזה ב-2, לרשום את שאר החלוקה (הוא תמיד שווה ל-0 או 1, תלוי אם המספר זוגי או אי-זוגי) , ומחלקים שוב את תוצאת החלוקה ב-2, רשמו שוב את שארית החלוקה (0 או 1), ושוב מחלקים את התוצאה מהחלוקה השנייה ב-2. המשיכו כך עד שתוצאת החלוקה תהיה שווה לאחד. לאחר מכן, נכתוב את כל האפסים והאחדים המתקבלים בסדר הפוך , החל מתוצאת החלוקה העדכנית ביותר, שתמיד שווה ל-1. הערה חשובה. התוצאה הסופית של חלוקה רציפה של כל מספר שלם ב-2 תמיד תהיה בסופו של דבר אחד (1)! אם התוצאה גדולה מ-1, נמשיך לחלק את התוצאה הזו ב-2 עד שנקבל אחת כתוצאה מכך. ותוצאת החלוקה ב-2 יכולה להיות אפס (0) רק במקרה אחד - זו החלוקה של האפס עצמו ב-2. דוגמה. בואו נמיר את המספר 145 מהשיטה העשרונית לבינארי. 145/2 = 72 (שארית 1 ) 72/2 = 36 (שארית 0 ) 36/2 = 18 (שארית 0 ) 18/2 = 9 (שארית 0 ) 9/2 = 4 (שארית 1 ) 4/2 = 2 (שארית 0 ) 2/2 = 1 (שארית 0 ) כעת אנו "אוספים" את המספר הבינארי שלנו בסדר הפוך. נקבל את המספר 10010001. בוצע! ניואנס מעניין 1. בואו נמיר את המספר 1 מהשיטה העשרונית לבינארי. במערכת הבינארית, מספר זה ייכתב גם כ-1. הרי התוצאה הסופית של החלוקה ב-2, שאמורה להיות שווה ל-1, כבר שווה למספר 1 עצמו. 1₁₀ = 1₂ ניואנס מעניין 2. בואו נמיר המספר 0 מהמערכת העשרונית לבינארי. במערכת הבינארית, מספר זה ייכתב גם כ-0. 0₁₀ = 0₂ 2.1.2 מספרים שברים. כיצד להמיר מספרים שברים לבינאריים? כדי להמיר שבר עשרוני למערכת המספרים הבינארית, עליך: א) להמיר את כל החלק של השבר לשיטה הבינארית לפי האלגוריתם הנלמד בפסקה 2.1.1 ב) להכפיל את החלק השבר של השבר ב-2 , לכתוב הספרה המתקבלת של התוצאה לפני הנקודה העשרונית (תמיד שווה ל-0 או 1, שזה הגיוני), ואז רק להכפיל שוב את החלק השבר של התוצאה המתקבלת ב-2, לרשום את הספרה המתקבלת של התוצאה לפני הנקודה העשרונית (0 או 1) וכן הלאה עד השבר. חלק מתוצאת הכפל הופך להיות שווה ל-0 או עד למספר המקומות העשרוניים הנדרשים ( הדיוק הנדרש ) (שווה למספר הכפלות ב-2). אז אתה צריך לרשום את הרצף המתקבל של אפסים ואחדים כתובים לפי הסדר אחרי הנקודה שמפרידה בין החלקים השלמים והשברים של המספר האמיתי (שבר). דוגמה 1. נמיר את המספר 2.25 (2 נקודות 25 מאיות) מהשיטה העשרונית למערכת הבינארית. במערכת הבינארית השבר יהיה שווה ל -10.01 . איך השגנו את זה? המספר מורכב מחלק שלם (עד נקודה) - זה 2 וחלק שבר - זה 0.25. 1) תרגום של החלק כולו: 2/2 = 1 (השאר 0 ) החלק כולו יהיה 10 . 2) תרגום של החלק השבר. 0.25 * 2 = 0 .5 (0) 0.5 * 2 = 1 .0 (1) החלק השבר הפך להיות שווה ל-0 כתוצאה מכפל רציף ב-2. אנחנו מפסיקים להכפיל. כעת אנו "אוספים" את החלק השברי לפי סדר - נקבל 0.01 במערכת הבינארית. 3) הוסף את החלקים השלמים והשברים - נקבל שהשבר העשרוני 2.25 יהיה שווה לשבר הבינארי 10.01 . דוגמה 2. נמיר את המספר 0.116 מהשיטה העשרונית למערכת הבינארית. 0.116 * 2 = 0.232 (0) 0.232 * 2 = 0.464 (0) 0.464 * 2 = 0.928 (0) 0.928 * 2 = 1.856 (1) //הסר את החלק השלם של תוצאה זו 0.856 * 72 = 1 . ) //זרוק את כל החלק של התוצאה הזו 0.712 * 2 = 1 .424 (1) //השליך את כל החלק של התוצאה הזו 0.424 * 2 = 0 .848 (0) כפי שאנו יכולים לראות, הכפל ממשיך ונמשך , החלק השבר של התוצאה לא הופך להיות שווה ל-0. ואז נחליט שנמיר את השבר העשרוני שלנו לבינארי בדיוק של 7 מקומות עשרוניים (סיביות) אחרי הנקודה (בחלק השבר). נזכור מה למדנו על ביטים לא משמעותיים - ככל שהביט (הביט) רחוק מכל החלק, כך קל לנו יותר להזניח אותו (הסבר בסעיף 1 בהרצאה, מי שכח). נקבל את השבר הבינארי 0.0001110 בדיוק של 7 ביטים אחרי הנקודה. 2.2 המרה מבינארי לעשרוני. 2.2.1 מספרים שלמים. לתרגם את כולומספר ממערכת המספרים הבינארית לעשרוני, יש צורך לחלק את המספר הזה לספרות (סיביות) ולהכפיל כל ספרה (סיביות) במספר 2 עד דרגה חיובית מסוימת (מעלה זו מתחילה לספור מימין לשמאל מהפחות משמעותית (ביט ימני) ומתחיל מ-0 ). במילים אחרות, החזקה של שתיים שווה למספר של סיביות נתונה (אך ניתן להשתמש בכלל לא כתוב זה רק במקרה של המרת מספרים שלמים, שכן עבור מספרים שברים, מספור הביטים מתחיל בחלק השבר, שמתורגם לתוך המערכת העשרונית אחרת ). לאחר מכן עליך להוסיף את המוצרים המתקבלים. דוגמא. בואו נמיר את המספר הבינארי 110011 למערכת המספרים העשרונית. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ כתוצאה מכך, נקבל את המספר 51 ב- מערכת בינארית. למידע, להלן טבלה של החזקות הראשונות של המספר 2 . אל תקרא עדיין :))) מספרים אמיתיים בזיכרון המחשב.  בפיתוח!!!  - 5 ! שימו לב שחזקת האפס של מספר הוא תמיד 1. 2.2.2 מספרים שברים. על מנת להמיר מספר שבריר (אמיתי) בינארי לעשרוני , עליך: א) להמיר את חלקו השלם לעשרוני לפי האלגוריתם מפסקה 2.2.1 ; ב) תרגם את חלקו השבר כדלקמן. יש צורך להציג את החלק השבר כסכום מכפלות של ספרות בשתיים , מועלות לחזקה שלילית מסוימת (החזקה של הספרה הראשונה אחרי הנקודה (אחרי כל החלק של השבר) תהיה שווה ל-1, עבור הספרה השנייה אחרי הנקודה תהיה שווה ל-2 וכו') תוצאה כמות זו תהיה החלק השברי של המספר במערכת העשרונית. דוגמא. בואו נמיר את המספר 10111.01 למערכת הבינארית. 10111.01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0.25) = 23.25₁₀ כתוצאה מכך, נקבל את המספר 23.25 במערכת המספרים העשרונית. טבלת החזקות השליליות הראשונות של 2 ניתנת להלן. אל תקרא עדיין :))) מספרים אמיתיים בזיכרון המחשב.  בפיתוח!!!  - 7 2.2.3 נוסחה כללית להמרת מספרים מבינארי לעשרוני. בוא ניתן נוסחה כללית להמרת מספרים מבינארי לעשרוני (גם שלמים וגם חלקים שברים). אל תקרא עדיין :))) מספרים אמיתיים בזיכרון המחשב.  בפיתוח!!!  - 4 כאשר A הוא מספר במערכת המספרים הבינארית; הבסיס של מערכת המספרים הוא 2 (כלומר כל ביט מוכפל ב-2 בחזקת); נ- מספר ספרות שלמות (סיביות) ; m הוא מספר הספרות השבריות (סיביות) של המספר . החלק הראשון של החלק השלם מנקודת החלוקה מסומן באדום . זה תמיד מוכפל ב-2 בחזקת אפס. הביט הבא לפניו (משמאל) מוכפל ב-2 בחזקת הראשונה וכו'. החלק הראשון של החלק השברי מנקודת החלוקה מסומן בירוק . זה תמיד מוכפל ב-2 בחזקת מינוס ראשונה. הסיביות הבאה מימין מוכפלת ב-2 בחזקת מינוס שנייה וכו'. 3. סימון מדעי: סימון מנורמל בשתי המערכות. מנטיס, מעריך, דרגת מעריך. 3.1 צורה אקספוננציאלית של כתיבת מספר. בעבר, למדנו תכנית מפורטת לרישום מספרי מיקום לפי ספרה. ניקח את המספר 0.00000000000000000000016 . יש לו ערך ארוך מאוד בצורה סטנדרטית . ובצורה אקספוננציאלית זה ייראה כך: 1.6 * 10ˉ²¹ אז מהי הצורה האקספוננציאלית של מספר וכיצד לייצג מספר בצורה זו? סימון מדעי למספר הוא ייצוג של מספרים ממשיים כמנטיסה וכמעריך . נוח לייצוג מספרים גדולים מאוד וקטנים מאוד, כמו גם לאיחוד כתיבתם. N = M * pⁿ כאשר N הוא המספר שייכתב, M הוא המנטיסה של המספר, p הוא הבסיס (שווה לבסיס מערכת המספרים של המספר הנתון), n (מספר שלם) הוא הסדר (מעלה , יכול להיות חיובי ושלילי), p בחזקת n הוא המספרים האופייניים (מעריך, כלומר בסיס מורם בחזקת (סדר)). ניואנס חשוב. אם החלק השלם של המספר העשרוני שונה מ-0 , אז הסדר (הדרגה) של המעריך יהיה חיובי , אם החלק השלם שווה ל-0 , דרגת המעריך תהיה שלילית . 3.2 צורה רגילה ומנורמלת של כתיבת מספרים. הצורה הנורמלית של מספר היא צורה שבה המנטיסה (מבלי לקחת בחשבון את הסימן) ממוקמת על חצי המרווח [0,1], כלומר 0 <= M < 1. לצורת כתיבה זו יש חסרון : מספרים מסוימים נכתבים בצורה מעורפלת (לדוגמה, 0.0001 יכול להיכתב כ-0.000001*10², 0.00001⋅10¹, 0.0001⋅10º, 0.001⋅10ˉ¹ וכן הלאה). לכן, צורה נוספת של הקלטה נפוצה (במיוחד במדעי המחשב) - מנורמלת , שבו המנטיסה של מספר עשרוני לוקחת ערכים מ-1 (כולל) עד ​​10 (בלעדי), כלומר, 1 <= M < 10 (באופן דומה, המנטסה של מספר בינארי לוקחת ערכים מ-1 עד 2 ). במילים אחרות, המנטיסה במערכת העשרונית חייבת להיות מספר חלקי מ-1.0 (כולל) עד ​​10 (בלעדי) , כלומר. החלק השלם של המנטיסה חייב להכיל ספרה אחת, והחלק השברי אינו מוגבל מתמטית. היתרון של הצורה המנורמלת הוא שבכך, כל מספר (למעט 0) נכתב בצורה ייחודית. החיסרון הוא שאי אפשר לייצג 0 בצורה זו, ולכן ייצוג המספרים במדעי המחשב מספק סימן (ביט) מיוחד למספר 0. 3.3 דוגמאות לכתיבת מספרים עשרוניים בצורה מנורמלת אקספוננציאלית. בואו נסתכל על דוגמאות. דוגמה 1. בוא נכתוב את המספר העשרוני 1015000 (מיליון וחמישה עשר אלף) בצורה מנורמלת אקספוננציאלית. מערכת המספרים עבור מספר זה היא עשרונית, כך שהבסיס יהיה 10 . בואו נבחר את המנטיסה . כדי לעשות זאת, דמיינו את המספר כשבר, שחלקו השבר יהיה שווה לאפס (מכיוון שהמספר הוא מספר שלם): 1000000.0. אם החלק השלם של המספר גדול מ -0 , הזז את הנקודה שמאלה מהמיקום ההתחלתי שלה (בתוך החלק השלם) עד שתישאר רק ספרה אחת בחלק השלם . אחרי זה שמנו מחזור. אנחנו משליכים אפסים לא משמעותיים (בסוף המספר). נקבל את המנטיסה של המספר השווה ל -1.015 . בואו נקבע את המידה (סדר) של בסיס המספר. כמה עמדות שמאלה זזה הנקודה שלנו המפרידה בין החלקים השלמים והשברים? לשישה תפקידים. זה אומר שהסדר יהיה 6 . במקרה זה, הסדר חיובי (הזזנו את הנקודה בחלק השלם של המספר שאינו שווה ל-0). הערך הסופי בצורה מנורמלת: 1.015 * 10⁶ . נוכל לכתוב את המספר הזה בצורה זו: 1.015E6 (כאשר E6 הוא המעריך של מספר עשרוני, כלומר 10 בחזקת 6). בואו נבחן את עצמנו. סימון מעריכי למספר אינו אלא מכפלה של מספר (מנטיסה) ומספר אחר (מעריך). מה קורה אם מכפילים 1.015 ב-10⁶? 1.015*10⁶ = 1.015*1000000 = 1015000 . זה נכון. גישה זו (מנורמלת) עוזרת ליצור תיעוד חד משמעימספרים בצורה אקספוננציאלית, כפי שצוין לעיל. דוגמה 2. בוא נכתוב את המספר האמיתי העשרוני 0.0098 בצורה מנורמלת. נדגיש את בסיס המספר - הוא שווה ל -10 (מערכת מספרים עשרוניים). בואו נבחר את המנטיסה של המספר - היא שווה ל -9.8 (החלק השלם של המספר שווה לאפס, מה שאומר שנזיז את הנקודה ימינה לספרה המשמעותית הראשונה (ששוכנת בטווח שבין 1 ל-9 כולל) אנו קובעים את סדר המספר - הזזנו את הנקודה בשלושה מיקומים, כלומר הסדר הוא 3. חיובי האם הוא שלילי או שלילי? מכיוון שהזזנו את הנקודה ימינה (בחלק השבר של המספר), סדר (כוח) יהיה שלילי . הרשומה הסופית של המספר בצורה מנורמלת היא 9.8 * 10ˉ³ או 9.8E-3 . בוא נבדוק את עצמנו שוב. נכפיל 9.8 ב- 10ˉ³. 9.8 * 10ˉ³ = 9.8 * 0.001 = 0.009 נכון. דוגמה 3. בוא נכתוב את המספר האמיתי העשרוני 3.56 בצורה מנורמלת. בחר את הבסיס של המספר - הוא שווה ל -10 (מערכת מספרים עשרוניים) בחר את המנטיסה של המספר - הוא שווה ל... 3.56 (המספר השלם) חלק מהמספר הוא ספרה אחת, לא שווה ל-0. זה אומר שאין צורך להזיז את הנקודה לשום מקום, המספר עצמו יהיה המנטיסה.) בואו נדגיש את סדר הבסיס: לפי איזה מספר צריכה המנטיסה , שווה למספר עצמו, להיות מוכפל כדי שלא ישתנה? ליחידה. זה אומר שהסדר יהיה אפס. הרשומה הסופית של המספר בצורה מנורמלת היא 3.56 * 10º או 3.56E0. 4. אחסון מספרים אמיתיים בזיכרון המחשב: צף וכפול. 4.1 סוגים צפים וכפולים. בואו נעבור לקטע המפתח של ההרצאה שלנו. כפי שאנו כבר יודעים, ישנם שני סוגים של מספרים ממשיים ב-Java: float וכפול . סוג הצוף תופס 32 סיביות בזיכרון המחשב ויכול לקחת ערכים בטווח [3.4E-38; 3.4E+38) (במילים אחרות, בטווח שבין 3.4*10ˉ³⁸ (כולל) ל-3.4 * 10³⁸ (לא כולל)). ניואנס חשוב 1. מספרים צפים יכולים להיות חיוביים או שליליים. טווח זה לעיל מוצג כדי לציין את המודולים של המספרים הכלולים בטווח הצף. ניואנס חשוב 2. 10³⁸ שווה בערך ל- 2¹²⁷ , בהתאמה, 10 ˉ³⁸ שווה בערך ל- 2ˉ¹²⁷ . לפיכך, ניתן לכתוב את המרווח של ערכים מוחלטים של מספרי צפים כ-[3.4 * 2ˉ¹²⁷; 3.4 * 2¹²⁷). הסוג הכפול תופס פי שניים זיכרון מחשב - 64 סיביות ויכול לקבל ערכים עשרוניים בטווח [-1.7E+308; 1.7E+308) בהתאמה. 4.2 צורה מנורמלת אקספוננציאלית של מספרים בינאריים. אנו יודעים שמספרים מאוחסנים בצורה בינארית בזיכרון המחשב. אז בואו ניקח את המספר 1560.256 (סוג צף) ונמיר אותו למערכת הבינארית בצורה מיקומית: 11000011000.01000001100 . אפשר לחשוב שכך זה יישמר בזיכרון המחשב. אבל זה לא נכון! בזיכרון המחשב, הטיפוסים הצפים והכפולים ( סוגי נקודה צפה אמיתית ) מאוחסנים בצורה מנורמלת אקספוננציאלית , אך בסיס החזקה הוא 2 במקום 10. זאת בשל העובדה שכאמור לעיל, כל הנתונים ב המחשב מיוצג בצורה בינארית (סיביות ). כמות מסוימת של זיכרון מחשב מוקצה למספר. הבה נציג את המספר החיובי 15.2 בצורה מעריכית מנורמלת: 1.52*10¹ . לאחר מכן, בואו נציג את ה"תאום" הבינארי שלו 1111.00110011001 גם בסימון מנורמל אקספוננציאלי, תוך שימוש באותו אלגוריתם: 1) הבסיס יהיה שווה ל-2 2) המנטיסה תהיה שווה ל-1.11100110011001 3) התואר יהיה חיובי ושווה ל-3 (הנקודה מוזזת 3 סיביות שמאלה) במערכת עשרונית. בואו נמיר אותו למערכת הבינארית: 11 . אז בצורה מנורמלת אקספוננציאלית בינארית זה יהיה 1.11100110011001 * 2¹¹. 4.3 אחסון הצורה הבינארית המנורמלת המעריכית של מספר צף בזיכרון המחשב. אז, הבנו שמספר אמיתי יאוחסן בזיכרון המחשב בצורה בינארית מנורמלת מעריכית . איך זה יראה בזיכרון? בואו ניקח את סוג הצוף . המחשב מקצה 32 סיביות לכל מספר צף . הם מחולקים באופן הבא . איור זה מציג באופן סכמטי את הזיכרון המוקצה למספר צף של 32 סיביות במחשב. מספור הסיביות מצוין באדום . ירוק מציין חתיכת זיכרון שהוקצה (1 סיביות) לאחסון הסימן של המספר. צהוב מציין חתיכת זיכרון שהוקצה לאחסון הכוח המוזז (סדר) של הצורה האקספוננציאלית של המספר (8 סיביות). כְּחוֹל אל תקרא עדיין :))) מספרים אמיתיים בזיכרון המחשב.  בפיתוח!!!  - 5 מציין חתיכת זיכרון שהוקצה לאחסון המנטיסה המנורמלת של מספר ללא יחידה מרומזת (23 סיביות). בואו נסתכל מקרוב. 1) חתיכת סימן. הביט המשמעותי ביותר (ראשון משמאל) מוקצה תמיד לאחסון הסימן של המספר (1 אם המספר שלילי, ו-0 אם המספר חיובי). חריג עשוי להיות המספר אפס - בתכנות, אפס יכול להיות גם שלילי וגם חיובי . 2) לאחר מכן באים הביטים של התואר (סדר) של המעריך עם בסיס 2 . לשם כך, מוקצים 8 ביטים. דרגת המעריך של מספרים צפים , כידוע, יכולה להיות גם שלילית (עבור מספרים שחלקם השלם הוא 0, ראה סעיף 3.3) וגם חיובית (עבור מספרים שהחלק השלם שלהם שונה מאפס) ונעה בין 2ˉ¹²⁷ ל-2¹²⁷ . בתיאוריה, עלינו להקצות סיביות אחת כדי לקבוע את הסימן של המעריך, כפי שקורה בסיבית הסימן. אבל זה לא נכון. כדי לא לבזבז קצת על קביעת הסימן של המעריך, מספרי צף מוסיפים היסט למעריך של חצי בייט +127 (0111 1111). לפיכך, במקום טווח של עוצמות מ-2ˉ¹²⁷ עד 2¹²⁷, המחשב מאחסן טווח של עוצמות מ-0 עד +254 - כל ערכי ההספק חיוביים , אין צורך לבזבז בית נוסף על השלט. מסתבר שערך המעריך מוסט בחצי ביחס לערך האפשרי. המשמעות היא שכדי לקבל את הערך האמיתי של המעריך, עליך להחסיר את ההיסט הזה מהערך המאוחסן בזיכרון. אם ערך המעריך המאוחסן בזיכרון קטן מההיסט (+127), אז המעריך הוא שלילי: זה הגיוני. דוגמא. בואו נבצע תזוזה בדרגה שלילית -18 . נוסיף לו את ההיסט +127, נקבל את הערך של התואר +108 (אל תשכח את המדרגה 0 בחישוב). בואו נמיר את התואר לצורה בינארית: 1101100 אבל 8 סיביות זיכרון מוקצות לתואר, וכאן נקבל מספר של 7 סיביות. במקום הספרה הגבוהה הריקה והלא תפוסה (ביט), המחשב מוסיף 0. התוצאה היא שדרגה זו תישמר בזיכרון המחשב כ -01101100 . בוא נראה: +108 < +127, כלומר התואר הוא למעשה שלילי. שקול את הטבלה המעניינת הבאה: היא מציגה את כל הערכים האפשריים של החזקות של הצורות המנורמלות של מספרים צפים במערכות בינאריות ועשרוניות. כפי שאנו יכולים לראות, במערכת הבינארית +127 הוא בדיוק חצי מבייט שלם (8 סיביות). 3) 23 הסיביות הנותרות שמורות למנטיסה אל תקרא עדיין :))) מספרים אמיתיים בזיכרון המחשב.  בפיתוח!!!  - אחד עשר. אבל עבור מנטיסה בינארית מנורמלת, הסיבית המשמעותית ביותר (המכונה החלק השלם של המנטיסה המנורמלת) תמיד שווה ל-1 (נקראת implicit one ), מכיוון שמספר המנטיסה נמצא בטווח 1<=M<2 (ו זכור גם את סעיף 2.1.1 של ההרצאה). היוצא מן הכלל היחיד הוא המספר 0. אין טעם לכתוב יחידה לתוך 23 הסיביות המוקצות ולבזבז זיכרון, ולכן שאר המנטיסה (החלק השברי שלה) נכתב לתוך 23 הסיביות שהוקצו. מסתבר שבעצם לחלק המשמעותי של מספר הצוף יש אורך של 24, מתוכם ביט אחד פחות מאוחסן. ניואנס חשוב. הבה נזכור שכאשר ממירים מספרים שברים עשרוניים למספרים בינאריים, החלק השברי במערכת הבינארית התברר לעתים קרובות כעצום. ויש לנו רק 32 סיביות לאחסון מספר צף. במקרה זה, הספרות הנמוכות והפחות משמעותיות של השבר הבינארי (זכור את סעיף 2.1.2 בהרצאה זו) לא ייכללו בזיכרון שהוקצה והמחשב יזניח אותן . הדיוק של המספר יאבד , אבל, אתה מבין, הוא מינימלי. במילים אחרות, הדיוק של צפים שברים הוא 6-7 מקומות עשרוניים. 4.4 אחסון הצורה הבינארית המנורמלת המעריכית של המספר כפול בזיכרון המחשב. מספרים אמיתיים מסוג כפול מאוחסנים בזיכרון המחשב באותו אופן כמו מספרים צפים, למעט מאפיינים מסוימים. למספר כפול יש 64 סיביות בזיכרון המחשב. הם מחולקים באופן הבא (גם לפי הסדר משמאל לימין): 1) סימן סיביות (ראה סעיף 4.3). אנו מבינים שמספר הביט הזה יהיה 63 . 2) תואר (סדר). מספרים כפולים מוקצים 11 סיביות כדי לאחסן אותו . מבוצעת גם הסטת מעלות , אך עבור מספרים כפולים היא תהיה שווה ל- +1023. 3) Mantissa (חלק משמעותי). מספרים כפולים מוקצים 52 סיביות (ספרות) כדי לאחסן אותו. כמו כן, החלק השלם המדויק של המנטיסה ( יחידה מרומזת ) אינו מאוחסן בזיכרון . ראוי גם לציין שהדיוק של כפולות שבריות הוא בערך 16 מקומות עשרוניים . 4.5 דוגמאות לייצוג מספר ממשי של המערכת העשרונית בזיכרון המחשב. והנקודה האחרונה של ההרצאה שלנו תהיה דוגמה להמרת מספר חלקי של מערכת המספרים העשרוניים לצורת האחסון שלו בזיכרון המחשב כדי לגבש את ההבנה של הנושא. דוגמה 1. קח מספר-4.25 סוג ציפה. הבה נציג את זה בצורה מנורמלת אקספוננציאלית במערכת המספרים הבינארית, ונזכור את כל מה שכיסינו בהרצאה זו. 1) המר את החלק השלם של המספר לצורה בינארית: 4/2 = 2 (שארית החלוקה 0 ) 2/2 = 1 (שארית החלוקה 0 ) החלק השלם יהיה שווה ל -100 במערכת הבינארית. 2) המר את החלק השברי של המספר לצורה בינארית. 0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) החלק השברי יהיה שווה ל -0.01 במערכת הבינארית. 3) לפיכך, -4.25₁₀ = -100.01₂ . 4) הבה נמיר את המספר -100.01₂ לצורה מנורמלת מעריכית במערכת המספרים הבינארית (מה שאומר שבסיס החזקה יהיה 2). -100.01₂ = -1.0001 *2² בואו נמיר את ערך התואר מפורמט עשרוני לבינארי . 2/2= 1 (השאר 0 ) התואר הוא 10₂. אנו מקבלים שהמספר -4.25₁₀ בצורה המנורמלת המעריכית הבינארית שלו יהיה שווה ל -1.0001 * 2¹º בוא נרשום איך הוא ייראה בזיכרון המחשב. סיביות הסימן תהיה 1 (מספר שלילי). היסט המעריך שווה ל-2+127 = 129₁₀ = 10000001₂ נסיר את המרומז מהמנטיסה , נקבל 00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 סיביות ( נמלא את הביטים הבלתי תפוסים מסדר נמוך באפסים ). שורה תחתונה. 1 10000001 0001000000000000000000000 - כך המספר -4.25 מאוחסן בזיכרון המחשב. דוגמה 2. המר את מספר הצף 0.75₁₀ לפורמט אחסון בינארי בזיכרון המחשב. התוצאה צריכה להיות 0 01111110 10000000000000000000000 . תודה על תשומת הלב.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION