>> DAVID מלאן: בואו עכשיו לפוצץ את דעתך.
מתברר בעולם האמיתי 1 מחולק על ידי 10 הוא אכן 1/10, או 0.1.
אבל במחשבים שיש להם רק סופי מספר הביטים שבה
מייצגים מספרים, אתה לא יכול תמיד מייצג מספרים כמו 1/10 עם
דיוק מושלם.
במילים אחרות, לפעמים יש להם מחשבים כדי לבצע שיחות שיפוט ולא
בהכרח מייצג את המספר שאתה רוצה שבדיוק כמו שאתה מתכוון.
>> לדוגמא, נניח שאני חוזר אל תכנית זו ולשנות את 0.1 ל,
הו, 0.28, ובכך מצביעים על כך אני רוצה printf לprintf כדי
28 מקומות של דיוק.
בואו עכשיו לשמור ולקמפל את התכנית, הפעם עם floats2 איפור.
להפעיל אותו עם floats2 לוכסן נקודה.
ו, אלוהים יקר, זה זמן שאני רואה לא 0.1, אבל 0.10000000, שהוא די
טוב עד כה.
אבל אז, 14901161193847656250.
>> ובכן, מה קורה?
ובכן, מתברר שמצוף הוא מאוחסן בדרך כלל בתוך מחשב
עם 32 סיביות.
32 הוא כמובן מספר סופי, אשר משמעות דבר הוא כי אתה יכול רק לייצג
עם 32 ביטים מספר סופי של ערכי נקודה צפה.
למרבה הצער, זה אומר כי מחשב אינו יכול לייצג את כל אפשרי
מספרי נקודה צפה, או מספרים ממשיים, שקיים בעולם,
כי זה רק לחתיכות כל כך הרבה.
>> ולכן מה שהמחשב זה כנראה נעשה במקרה זה הוא מייצג 1/10 ל
המרחפת הקרובה ביותר האפשרית ערך נקודה שהוא יכול.
אבל אם נסתכל, כמו שיש לנו כאן, ל28 מקומות עשרוניים, אנחנו מתחילים לראות ש
חוסר דיוק.
אז מדובר בבעיה עם אין פתרון מושלם.
אנו יכולים להשתמש כפולים במקום לצוף, אשר נוטה להשתמש 64 סיביות כמו
לעומת 32.
אבל כמובן, 64 הוא גם סופיים, כך שהבעיה תהיה
תישאר גם עם זוגות.