שאלה בקשר לדיוק החישוב של המעבד

אמנם הסגנון של DNile לא במקום אבל אתה אכן טועה בהסבר שלך, ואם תרשה לי אנסה להסביר ללא התלהמויות מיותרות. מספרי נקודה צפה מוגדרים ע"י מנטיסה ואספוננט. בשפה קצת פשטנית, תחשוב שכל הספרות במספר (לפני ואחרי הנקודה) מאוחסנות במנטיסה, והאקספוננט מחזיר את מיקום הנקודה. לכן זה נקרא נקודה צפה. למשל, אם יש לך את המספר 123.456, אז המנטיסה תחזיק 123456 והאקספוננט יכיל 3 על מנת לסמל שיש 3 ספרות אחרי הנקודה (שוב, התיאור שלי הוא טיפה פשטני ממה שבאמת קורה, זה רק לצורך ההבנה). מכאן תבין שאין דיוק אבסולוטי של ספרות אחרי הנקודה. ככל שיש לך יותר ספרות לפני הנקודה, אתה תאבד ספרות אחרי הנקודה. אי אפשר להגיד מראש כמה ספרות משמעותיות אחרי הנקודה בלי לדעת איזה פעולות אתה עומד לבצע - כמו שאמר DNile, אם תכפיל במליון ותחלק במליון (או בכל מספר גדול אחר), אתה תאבד ספרות אחרי הנקודה משום שהמנטיסה תצטרך להחזיק (אפילו רגעית) יותר ספרות לפני הנקודה והמקום שיש לה לאחסן הוא סופי ומוגבל. הספרות שאין להן מקום ילכו לאיבוד.
 

DNile

New member
אני חושב שלאור

http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=89&msgid=66984724 הסגנון שלי בהחלט במקום.
 
טוב, קראתי עוד פעם את כל השרשור (לא יודע למה בעצם) והבנתי שאתה כן ככל הנראה ידעת את כל מה שאמרתי ולא חידשתי לך כלום. אז אם התשובה שלי עזרה במשהו לשואל המקורי, מה טוב. אם לא, סתם אלקטרונים מבוזבזים, לא נורא. בכל מקרה, הנה מאמר מועיל בנושא למי שמעוניין: http://www.cs.princeton.edu/introcs/91float/
 

inferno3

New member
איזה חשבון?

אני השתמשתי בדאבל,אבל התוצאה שלי טיפה שונה משל האוניברסיטה(מדובר על שוני ממש קטן הרבה פחות מאלפית). ואני רק רוצה לדעת אם למעבד שלי יש אשמה בעניין הזה,או האם יכולה להיות סיבה אחרת,שלא קשורה לחישוב שלי.
 

shooshXX

New member
החשבון שאומר..

קיבלתי תוצאה עם דיוק של 7 ספרות בטסטר יש דיוק של 15 ספרות 7 ספרות זה דיוק של float 15 ספרות זה בדיוק של double => מסקנה - איפשהו אני משתמש ב float למרות שאני לא מודע לזה. או שלא. אבל זה הכי הרבה עזרה שאפשר לתת לך תחת הנסיבות. ולא. זה לא קשור למעבד. המעבד מחשב בדיוק שנותנים לו לחשב. אלא אם יש לך פנטיום עתיק.
 

inferno3

New member
אוקיי הבנתי אבל

אין סיכוי שיש לי איזה float כי הכל בקוד הוא דאבלים. זה מה שיצא לי: 0.017680615899984074 זה מה שאמור לצאת: 0.0176806160534009 ואני באמת מודה לך על העזרה,כי אני יודע שדי קשה לעזור בלי הקוד ,כי אי אפשר לדעת למה כל זה קשור.
 

DNile

New member
המלצה,

תפסיק להקשיב לו, הוא לא יודע יותר ממך בנושא.
 

inferno3

New member
ומה אתה אומר בקשר להבדל

בין התוצאות?... אני משתגע מזה נראה לי שהתוצאה שלי מדוייקת יותר משלהם.
 

DNile

New member
אתה צריך לקבל את זה שכשאתה

מתעסק עם מספרי נקודה-צפה, אתה מאבד דיוק. תעשה ניסוי - קח את התוצאה שלך, חלק אותה במיליון, ואז תכפיל במיליון, לכאורה - פעולה שאמורה לא לשנות בכלל את המספר. בפועל - כנראה שכן תשנה. מספיק שאתה בקוד שלך עשית משהו כזה (חילקת במיליון, ביצעת כל מיני פעולות, הכפלת במיליון), והם ויתרו על החלוקה במיליון וההכפלה במיליון, כדי שהתוצאות יהיו שונות, למרות שמתמטית, הן אמורות להיות זהות. * לא בטוח שמליון זה המספר הנכון, אם זה לא שינה שום דבר, תנסה חלוקה במיליארד.
 

inferno3

New member
אוקיי.

אני גם אנסה לראות אם עשיתי משהו נכון מתמטית אבל מיותר מבחינה של עיוות המספר(כמו שהסברת על החלוקה במיליון) תודה על העזרה.
 

vinney

Well-known member
רמז

אל תחלק במספר שאפשר לייצג אותו רק באקספוננטה
 

DNile

New member
צודק ../images/Emo13.gif

עוד קצת שיכור מאתמול בערב?
תחלק ותכפיל ב2123132
 

DNile

New member
יש אין סוף מספרים ממשיים.

אבל double/float מכילים מספר סופי של ביטים. צריך לשאול - איך אפשר לייצג אין סוף מספרים במספר סופי של ביטים, והתשובה היא: אי אפשר. אז מה עושים? מעגלים. ושם בדיוק הולך לך לאיבוד הדיוק.
 

ASP zone

New member
לך תדע

אולי איזה גאון ימצא בעתיד דרך להכיל מספר ממשי בזיכרון. יש משהו עם i במתמטיקה (לא ב5 יחידות לא יודע) שעושה את זה לא? תקן אותי אם אני טועה ואני טועה בטח.
 

DNile

New member
מתמטית, זה בלתי אפשרי.

חומר בסיסי של תורת הקבוצות. יש אינסוף ממשיים, מספר סופי של מספרים שאפשר לייצג בזכרון נתון(שהוא תמיד סופי) -> אי אפשר להגיע להתאמה חד חד ערכית ביניהם. וi לא קשור לנושא.
 
למעלה