עבור לתוכן

ערך מוחלט בC#

Featured Replies

פורסם

איך עושים ערך מוחלט?

פורסם

אם אתה צריך את זה בשביל תוכנה שאתה בונה זה יותר פשוט ככה אבל אם זאת משימה לבית ספר אז אתה פשוט יכול לעשות IF שבו אתה אומר אם המספר חיובי, לא לעשות כלום, אם המספר שלילי להכפיל ב-1...

מקווה שלא הגבתי סתם ושזה לא היה מיותר...

פורסם

שזה בערך מה שעושים:


public static double Abs (double value)
{
return (value < 0)? -value: value;
}

והתכוונת להכפיל ב -1.

פורסם

איך עושים ערך מוחלט?

אמנם אפשר להשתמש ב Math.Abs, אבל מבחינה מתמטית זה נחשב לדי "מכוער".

הכי "נכון", יהיה להעלות בריבוע ולהוציע שורש ריבועי

פורסם

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

פורסם

אם אתה רוצה להשתמש ב- Math.Pow, תוכל להעביר לו double שמחזיק בתוכו 64 ביט, רק בשימושים מעטים באמת תחרוג מהגבול העליון שלו.

ואפילו אם הצלחת לעשות את זה איכשהו, אפשר להשתמש ב-decimal שמחזיק 128 ביט ומציע דיוק עוד יותר גבוה.

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

פורסם

ישנה דרך מכוערת אבל אלגוריתמית

להכפיל את המספר ב 1-

ולבדוק

אם המספר המתקבל גדול מהמספר הקודם אזי המספר החדש הוא הערך המוחלט

אם המספר המתקבל קטן מהמספר המקורי אזי הוא היה כבר חיובי

כלומר

יש לך לדוגמא משתנה d

d = f
f = f*(-1)
if(d>f){d=ereh muhlat}else {f=ereh muhlat}

פורסם

תגידו לי, מה נסגר אתכם? נראה שסובלים כאן ממקרה חמור של NIH.

פותח הת'רד שאל איך עושים ערך מוחלט ב-#C.

האנשים הנחמדים במיקרוסופט הלכו וכתבו פונקציה בשם Math.Abs שעושה בדיוק את זה. no more, no less.

עכשיו מתחילים כל מיני אנשים להמציא את הגלגל מחדש, ולהציע כל מיני פתרונות "יותר יעילים" או "יותר נכונים".

ב-99% מהמקרים, הפתרון היעיל ביותר והנכון ביותר, הוא הפתרון הסטנדרטי.

ואם ניטפל קצת יותר לפתרונות הספציפיים שהוצעו:

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

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

הפתרון של matteo הוא סתם סיבוך של הפתרון של D3buG.

פורסם

לעזאזל אתך שניצל! בדיוק רציתי להוסיף תשובה עם המרה למחרוזת ו-regular expressions!

פורסם

ברור לי שאנשים עשו את זה, כי זה ספריה שיש לה שימוש, אבל עדיין חבל שאין מימוש רשמי (האמת יש, אבל הורידו אותו ברגא האחרון http://blogs.msdn.com/bclteam/archive/2008/01/04/where-did-biginteger-go-melitta-andersen.aspx ) ומימוש חובבני, עם באגים, בעיות ביצועים ועוד תוספות זה נחמד, אבל לא ממש (בגלל זה גם הורידו ברגע האחרון את המימוש הרשמי).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים