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

הבנה של דיוק ודעה מדעית

לפני צלילה לאסטרטגיות של סיפוק, חיוני להבהיר את הדיוק והדיוק כפי שהם חלים על תוכנה מספרית.FLT:0AccuracyofLT:1 אמצעים עד כמה תוצאה קרובה היא לערך האמיתי או המקובל. לדוגמה, הסימול של מסלול של לוויין דורש את המיקום הסופי להיות בתוך מטר של מסלול בפועל; סימולציה כי הוא מפורט על ידי מספר מדויק של דיוק של 10 -2-9 מעלות צלזיוס בלבד.

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

אתגרים משותפים שתחתונותם הוגנות ודעה קדומה

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

שגיאות עגולות של Floating-Point Rounding

כמעט כל החישובים המדעיים מסתמכים על IEEE 754 צ'אט-מקודש (המתוקנת), ייצוג זה מציג שגיאות עגולות כי רק מספר סופי של ספרות ניתן לאחסן. התפעול כמו תוספת, תת-קרקעית, ריבוי, וחלוקת תוצאות שחייבות להיות מעוגלות כדי להתאים את האלגוריתם של ה-Mantissa או מיליוני פעולות, שגיאות זעירות אלה יכולות לצבור כמויות גדולות של חומרים, לדוגמה, כלומר, כלומר, כלומר, משוואות משוואות משוואות אטומיות, כאשר הן מתרחשות במידה ניכרת של 2 משוואות אלגוריתמיות, כאשר הן מתרחשות משוואות אלגוריתמיות, כאשר הן פחות מתבטלות, כאשר הן פחות מתבטלות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן פחות מתבטלות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן פחות מתבטלות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן בעלות אלגוריתמיות, כאשר הן בעלות אלגוריתמיות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן פחות מתבטלות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן מתרחשות אלגוריתמיות, כלומר, כאשר הן מתרחשות אלגוריתמיות, כאשר הן מתרחשות אלגוריתמיות, כאשר הן מתרחשות אלגוריתמיות, כלומר

חוסר יכולת

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

קוד מורשת ומודולריות מסכנות

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

יחידת אי-הפעולה ובדיקת התוקפנות

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

אפשרויות אלגוריתמיות שגורמות ליציבות

לחץ ביצועים מוביל לעתים קרובות מפתחי לבחור אלגוריתמים מהירים אך לא מדויקים.לדוגמה, לולאה תמימית עשויה לרוץ במהירות אך מצטברת שגיאה עגולה ליניארית עם מספר התנאים. בדומה, תוך מניעת מטריצה גדולה ישירות היא O(n3) אבל באופן מספרי פחות יציב מאשר פתרון מערכת באמצעות לו decomposition. כאשר הביצועים מקודם על איכות המספרית, התוכנה עלולה לייצר תוצאות כי הם תנאים מסוימים או לא נכונים.

מתן אסטרטגיות לשיפור הכדאיות והקדמה

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

להחליף פונקציות מתמטיות או לא מרתיעות

הדוגמניות והספריות הסטנדרטיות מספקות יישום משופר של פונקציות מתמטיות רבות.לדוגמה, (FLT:0 ב C++ הוא מדויק יותר מאשר FLT:1 כי הוא נמנע משגיאות ביטול הטבה המסוות ב- מחשוב השורש באמצעות לונאריתאם ו-Exponent. בדומה, באמצעות FLT:2 עבור חישובים hypotenuse מונעים על פני זרימת יתר וזרימה תחת זרימתם, יש להחליף פונקציות ישנות יותר, עם פונקציונליות סטנדרטיות, אך לא רק באופן ידניות.

אימוץ Summation Algorithms

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

השתמש בעדיפות גבוהה יותר או Arbitrary-Precision Arithmetic אסטרטגית

(ההפצה עשויה לכלול שדרוג הסוג המספרי המשמש לחישובים קריטיים.לדוגמה, מעבר מ-PrecisionFLT 3 ל- כפול-precisionFLT:4 יכול להפחית שגיאות עגולות על ידי מספר פקודות של גודל.במקרים קיצוניים, ספריות כמו MPFR או Boost.Multcision מציעים מספר שרירותי של ספקטרום גבוה יותר, עם זאת, עולה ביצועים כה מזיקים: 2.

קוד בנייה ל-Minimize Catastrophic Cancel

ביטול קטסטרופלי מתרחש כאשר תת-החלות של שתי כמויות כמעט שוות ערך.ספק נקודת מוצא יכולה לשכתב ביטויים אלגבריים כדי להימנע מכך.לדוגמה, הנוסחה לשורשים של משוואה קוואדרטית Ax2+bx+c=0 בדרך כלל ניתנת כמו x=(b ± ⁇ (b2-4ac)/2a).

Modularize Numerical Kernels for Targeted Testing

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

הוסף בדיקות יחידות עיקריות כי Target Numerical Properties

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

שיטות טובות ביותר למתן תוכנה מדעית

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

התחל עם הבנה של בסיס קוד קיים

לפני מתן מחדש, להשקיע זמן בסקירה קוד, ניתוח סטטי, ו profiling.זהה אילו אלגוריתמים מספריים משמשים והיכן שגיאות הן סבירות ביותר. כלים כמו FLT 6,FLT 7, ו-FLT:8 יכול להצביע על בעיות מספריות פוטנציאליות.דון עם מומחי דומיין כדי להבין את הסובלנות המקובלת לדיוק ולטווחי הקלט האופייניים.

עדיפות לאזורים בעלי טיס גבוה

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

השתמש ב-Vircit Control and Branching אסטרטגית

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

מבחן מתמיד ודיוק

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

שינויים במסמכים ובצדק

שיפורים נומריים הם לעתים קרובות עדינים.כאשר אנו מספקים, להוסיף הערות המסבירות את ה-FLT:0 למהרמב" 1 אלגוריתם מסוים או נוסחה נבחרו.לדוגמה, תגובה המציינת "שימוש ב- Kahan סיכום כדי להפחית את השגיאה המסובבת כאשר כוחות מסיקים" הוא הרבה יותר יקר מאשר החלפת הקוד.

השפעה אמיתית של סיפוק

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

מסקנה

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