Java 8 מתמטיקה שיטות חדשות

1. הקדמה

בדרך כלל, כשאנחנו חושבים על התכונות החדשות שהגיעו עם גרסה 8 של Java, תכנות פונקציונלי וביטויים למבדה הם הדברים הראשונים שעולים בראשנו.

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

במדריך זה נמנה ונביא דוגמה קטנה לכל אחת מהשיטות החדשות שנוספו לאחת ממעמדי הליבה של השפה: java.lang.Math.

2. חדש *מְדוּיָק() שיטות

ראשית, יש לנו קבוצה של שיטות חדשות המרחיבות חלק מפעולות החשבון הקיימות והנפוצות ביותר.

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

אנו יכולים להשתמש בשיטות אלה עם שתיהן מספרים שלמים ו מייחל כפרמטרים.

2.1. addExact ()

מוסיף את שני הפרמטרים, זורק חישוב חשבון במקרה של הצפה (שהולכת על הכל *מְדוּיָק() שיטות) של התוספת:

Math.addExact (100, 50); // מחזירה 150 Math.addExact (Integer.MAX_VALUE, 1); // זורק ArithmeticException

2.2. substractExact ()

מחסיר את הערך של הפרמטר השני מהראשון, זורק חישוב חשבון במקרה של הצפת החיסור:

Math.subtractExact (100, 50); // מחזיר 50 Math.subtractExact (Long.MIN_VALUE, 1); // זורק ArithmeticException

2.3. incrementExact ()

מגדיל את הפרמטר אחד, זורק חישוב חשבון במקרה של הצפה:

Math.incrementExact (100); // מחזירה 101 Math.incrementExact (Integer.MAX_VALUE); // זורק ArithmeticException

2.4. decrementExact ()

מקטין את הפרמטר אחד, וזורק חישוב חשבון במקרה של הצפה:

מתמטיקה. DecrementExact (100); // מחזירה 99 Math.decrementExact (Long.MIN_VALUE); // זורק ArithmeticException

2.5. להכפיל מדויק ()

הכפל את שני הפרמטרים, והשליך חישוב חשבון במקרה של הצפת המוצר:

Math.multiplyExact (100, 5); // מחזיר 500 Math.multiplyExact (Long.MAX_VALUE, 2); // זורק ArithmeticException

2.6. negateExact ()

משנה את סימן הפרמטר, לזרוק חישוב חשבון במקרה של הצפה.

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

Math.negateExact (100); // מחזירה -100 Math.negateExact (Integer.MIN_VALUE); // זורק ArithmeticException

הדוגמה השנייה דורשת הסבר מכיוון שהיא אינה מובנת מאליה: ההצפה נובעת מה- מספר שלם. MIN_VALUE בהיותו -2.147.483.648, ומצד שני ה מספר שלם.MAX_VALUE להיות 2.147.483.647 כך שהערך המוחזר אינו מתאים ל- מספר שלם על ידי יחידה אחת.

3. שיטות אחרות

3.1. floorDiv ()

מחלק את הפרמטר הראשון בפרק השני ואז מבצע a קוֹמָה() פעולה על התוצאה, החזרת ה- מספר שלם זה פחות או שווה למרווח:

Math.floorDiv (7, 2)); // מחזיר 3 

המרווח המדויק הוא 3.5 כך קומה (3.5) == 3.

בואו נסתכל על דוגמה אחרת:

Math.floorDiv (-7, 2)); // מחזיר -4 

המרווח המדויק הוא -3.5 כך קומה (-3.5) == -4.

3.2. modDiv ()

זו דומה לשיטה הקודמת רצפת דיב ()אבל להחיל את קוֹמָה() פעולה על המודול או שאר החלוקה במקום המרכיב:

Math.modDiv (5, 3)); // מחזיר 2 

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

Math.modDiv (-5, 3)); // מחזיר 1 

זה מחזיר 1 ולא 2 בגלל רצפת דיב (-5, 3) הוא -2 ולא -1.

3.3. nextDown ()

מחזירה את הערך התחתון המיידי של הפרמטר (תומך לָצוּף אוֹ לְהַכפִּיל פרמטרים):

לצוף f = Math.nextDown (3); // מחזירה 2.9999998 כפול d = Math.nextDown (3); // מחזירה 2.999999761581421

4. מסקנה

במאמר זה תיארנו בקצרה את הפונקציונליות של כל השיטות החדשות שנוספו לכיתה java.lang.Math בגרסה 8 של פלטפורמת Java וראיתי גם כמה דוגמאות לשימוש בהן.

כמו תמיד, קוד המקור המלא זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found