חישוב השורש התשיעי בג'אווה

1. סקירה כללית

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

2. הבעיה

נניח שאנחנו רוצים לחשב את השורש התשיעי כ:

בסיס = 125, אקספוננט = 3

במילים אחרות, איזה מספר בכוח 3 הוא 125?

זה בתנאי שזה השורש ה- n של מספר x שווה למספר x בכוחו של 1 / n. אז אנו מתרגמים את המשוואה שלנו ל:

שורש תשיעי = Math.pow (125, 1/3)

התוצאה היא 4.999999999999999. ו 4.999999999999999 בכוח של 3 הוא לא 125. אז איך נתקן את זה?

3. חישוב השורש התשיעי בצורה נכונה

הפיתרון לבעיה שלעיל הוא בדרך כלל דרך לעקיפת הבעיה המתמטית, והיא פשוטה ככל שהיא נעשית. זה ידוע היטב השורש ה- n של מספר x שווה למספר x בכוחו של 1 / n.

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

3.1. עָגוֹל

כעת נשתמש בעיגול כדי לפתור את הבעיה שלנו. בואו נשתמש בדוגמה הקודמת שלנו ונראה כיצד נוכל להשיג את התוצאה הנכונה:

חלל ציבורי כאשר BaseIs125AndNIs3_thenNthIs5 () {nth כפול = Math.round (Math.pow (125, 1.0 / 3.0)); assertEquals (5, nth, 0); }

3.2. שולי שגיאה

גישה זו דומה מאוד לעיל. עלינו רק להגדיר שולי שגיאה מקובלים, נניח 0.00001:

חלל ציבורי כאשר BaseIs625AndNIs4_thenNthIs5 () {nth כפול = Math.pow (625, 1.0 / 4.0); assertEquals (5, nth, 0.00001); }

הבדיקה מוכיחה שהשיטות שלנו מחשבות נכון את השורש ה- n.

4. מסקנה

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


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