ממוצע עם OVERFLOW

yonyl

New member
ממוצע עם OVERFLOW

שלום אני עובד עם משתנים FIXED של 32768- - 32767 בכל מקרה השאלה איך מחשבים ממוצע. האם יש לכם רעיון. מה הכוונה? נניח אני מחשב ממוצע של 100 מספרים , כל אחד מהם בטווח למשל 5000 אבל סכומם גדול מהטווח ולכן שיטה של סכום חלקי כמות לא תעבוד כי יהיה לי OVERFLOW בסכום. יש לכם רעיון לאלגוריתם שיכול לעזור לי . אני רוצה לבנות CLASS של ממוצע בטוח שכזה. היה לי איזה אלגוריתם שלא עבד נכון(כלומר גם סבל מבעיית OVERFLOW). אשמח לרעיונות תודה.
 

ron369

New member
אתה יכול לחשב את הממוצע של כל

קבוצה מבין כל האיברים בגודל מסויים. למשל, את הממוצע של עשרת הראשונים, ואז אלו בין 11-20, ואז בין 21-30, ואז בין 31-40, וכולי'. בסופו של דבר תצטרך לדאוג שזה יתחלק (או םע "מילוי" באיברים שלא ישפיעו על הממוצע באופן שגוי) בגודל אותו אתה בונה. ואז, תוכל לחשב את הממוצע של הממוצעים באותה דרך. ואז את הממוצע של הממוצעים של הממוצעים, וכולי'. אין לי זמן עכשיו להסבר ברור יותר, ככל הנראה
 

yonyl

New member
תגובה

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

ron369

New member
הממ

אולי אני יודע על איזה פתרון אתה מדבר (ככה חישבתי משהו פעם, בסקר - שמרתי את כמות ההצבעות הקודמות, ואת הממוצע, והייתי צריך לחשב בהנתן הצבעה חדשה את הממוצע וכמות ההצבעות החדשים). החסרון בשיטה הזו, לדעתי, הוא שהיא משתמשת בכפל של מספרים שאולי קטנים מאד מאד מאד, ומוסיף אותם לממוצע שהוא אולי גדול מאד מאד מאד. חוץ מזה, נראה לי שסכימה טבעית של איברים ואז חלוקתם ב-N, מהירה מחישוב ZZZ 1/n לכל n, הכפלת כל איבר ב-ZPIZ 1/n המתאים לו, והוספתו לסכום. אבל אני לא בטוח עד כמה זה באמת משנה, כמובן. אגב, בקשר לשיטה שלי - זה בסדר. חשבתי על זה. אפשר לפתור את הבעיות, לפחות בצורה כללית, סבירה לפחות (שמעט דומה לשיטה שבה כנראה השתמשת, אולי. יכול להיות שהשילוב של שתי השיטות יהיה אופטימלי). אתה צריך אבל, אכן, BUFFER בגודל קבוע.
 

yonyl

New member
תשובה

BUFFER בגודל קבוע אני אכן צריך. אבל לפי הפיתרון שלך אם הבנתי צריך BUFFER באורך לא קבוע ואין לי את הפריבילגיה לזה. חוץ מזה יותר מהיר לבצע כמה פעולות כולל כפל מאשר מאות חיבורים וכפלים לא? הממוצע לא גבוה מאוד מאוד , הוא מוגבל מן הסתם , זה הרעיון. מדובר במימושים של RT ולכן חשוב זמן ומקום ואני לא משתמש ב DOUBLE למשל(זקוק לרכיב מתימטי חזק אחרת מעמיס את ה CPU)... אבל כמו שאמרתי מצאתי פיתרון חישובי שכנראה דומה למה שהתכוונת (אבל לא למה שרשמת בהתחלה) היה איזה פיתרון פשוט היו בו טעויות ורציתי רעיונות , אבל תיקנתי את הפיתרון ומצאתי את הטעות ככה שזה בסדר עכשיו. הרעיון הוא איזושהיא מניפולציה מתימטית שמכפלה של משהו וחלוקה מנטרלות אחד את השני אבל בכל גורם לא יהיה OVER FLOW , לא סכימה של 1\מ של כל האיברים הBUFFER שלי קבוע.
 

yonyl

New member
אוקיי

curavr= (curavr+ (curSum/mNumOfPrevavr))*(mNumOfPrevMean/totNum) כאשר curavr - current avarage curSum - sum i want to add mNumOfPrevavr - quantity of values before current values totNum - qyantity of all numbers בפעם הראשונה לפני שיש קודמים אז חישוב רגיל. זהו מקווה שהבנת כלומר כל כמה סיבובים (נניח אני יודע שסכום של חמישה איברים לא יהיה OVERFLOW) אני מבצע את החישוב הזה.
 
למעלה