|
||||
|
||||
מספרם של אותם יחידי סגולה לא היה גבוה אז, ואני לא בטוח שהוא השתנה לרעה. כשנתקלתי לפני כמה שנים בפעם הראשונה בקטע הקידוד הזה (כמדומני בבלוג של גדי אלכסנדרוביץ'): float Q_rsqrt( float number ) המחשבה הראשונה שחלפה במוחי היתה שהשטח התקדם מאד מאז אותם ימים בהם היינו כותבים בקובול "add 1 to a". המחשבה השניה היתה שגם אז היו בטח כמה גאונים שתכנתו ברמה הזאת, ובעצם אולי אפילו הכרתי שטחית מי מהם. העובד הממוצע, אני בטוח שאין צורך להגיד, היה שש ליגות נמוך יותר. מה שכן, העבודה דרשה הכרות עם המחשב ברמה הרבה יותר קרובה לשפת מכונה מה שקורה היום: אמנם רוב הקידוד נעשה בשפות "גבוהות" - כלומר לא באסמבלר - אבל לא היו אמצעי ניפוי שגיאות מתקדמים, כך שנאלצנו לפענח תצלומי זכרון, מה שקרוי Dump.
{ long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, // this can be removed return y; } |
חזרה לעמוד הראשי | המאמר המלא |
מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים | |
RSS מאמרים | כתבו למערכת | אודות האתר | טרם התעדכנת | ארכיון | חיפוש | עזרה | תנאי שימוש | © כל הזכויות שמורות |