באג 2038
מתוך ויקיפדיה, האנציקלופדיה החופשית
באג 2038 הוא באג דמוי "באג 2000", שעלול לגרום לתקלות בתוכנה המשתמשת בשיטת POSIX לחישוב הזמן. לפי שיטה זו מיוצגת נקודת זמן כמספר השניות שחלפו מחצות הלילה של ה-1 בינואר 1970. מספר זה מיוצג באמצעות משתנה מסוג signed 32-bit integer (מספר שלם בגודל 32 ביט, בעל סימן המיוצג במחשב בשיטת משלים ל-2; כלומר, כזה שיכול להיות חיובי או שלילי). הערך החיובי המקסימלי שמשתנה מסוג זה יכול לקבל הוא 2,147,483,647 = 1 - 31 2. מספר זה של שניות יסתיים ב-19 בינואר 2038 בשעה 03:14:07 UTC. לאחר מועד זה יקרה overflow למספר וערכו יחושב כשלילי.
המועד | יצוג המספר בזיכרון |
---|---|
לפני | 11111111 11111111 11111111 01111111 |
אחרי | 00000000 00000000 00000000 10000000 |
בשיטת המשלים ל-2 ערך זה יפורש כ 2,147,483,648- = 31 2-. כלומר, לאחר המועד המחשב "יחשוב" שהתאריך הוא דצמבר 1901 וכל תוכנה שחישובייה מתבססים על שעון זה לא תעבוד נכון.
[עריכה] פתרונות
פתרון אפשרי אחד הוא להגדיר את המספר כ-unsigned, כלומר ללא סימן ובכך לדחות את הבעיה מ 2038 ל 2106. פתרון זה יכול ליצור בעיות למספר תוכנות שמחשבות הפרשי זמנים.
פתרון נוסף הוא לשנות את התקן ולהגדיר את הזמן כמשתנה מסוג signed 64-bit integer, כלומר מספר בעל 64 ביטים, ובכך אנו דוחים את הבעיה לשנת 292,471,210,647 (כ- 280 מיליארד שנה אחרי שהשמש תכבה). פתרון זה בעייתי ליישום מפני שהוא כרוך בשינוי תקן שעליו מסתמכות תוכנות רבות.