मैं मिनिक्स के जीएमटाइम फ़ंक्शन के स्रोत के दौरान हुआ। मुझे उस बिट में दिलचस्पी थी जिसने युग के बाद से साल की संख्या की गणना की थी। यहाँ कि बिट की हिम्मत कर रहे हैं:जीएमटाइम इस तरह कार्यान्वित क्यों किया जाता है?
http://www.raspberryginger.com/jbailey/minix/html/gmtime_8c-source.html
http://www.raspberryginger.com/jbailey/minix/html/loc__time_8h-source.html
#define EPOCH_YR 1970
#define LEAPYEAR(year) (!((year) % 4) && (((year) % 100) || !((year) % 400)))
#define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365)
int year = EPOCH_YR;
while (dayno >= YEARSIZE(year)) {
dayno -= YEARSIZE(year);
year++;
}
ऐसा लगता है कि एल्गोरिथ्म की तरह हे (एन), जहां n युग से दूरी है। इसके अतिरिक्त, ऐसा लगता है कि LEAPYEAR को प्रत्येक वर्ष – वर्तमान तिथियों के लिए दर्जनों बार और भविष्य में बहुत दूर तिथियों के लिए अलग-अलग गणना की जानी चाहिए। मैं एक ही बात करने के लिए निम्नलिखित कलन विधि था (ISO-9601 युग से इस मामले में (वर्ष 0 = 1 ईसा पूर्व) के बजाय यूनिक्स काल):
#define CYCLE_1 365
#define CYCLE_4 (CYCLE_1 * 4 + 1)
#define CYCLE_100 (CYCLE_4 * 25 - 1)
#define CYCLE_400 (CYCLE_100 * 4 + 1)
year += 400 * (dayno/CYCLE_400)
dayno = dayno % CYCLE_400
year += 100 * (dayno/CYCLE_100)
dayno = dayno % CYCLE_100
year += 4 * (dayno/CYCLE_4)
dayno = dayno % CYCLE_4
year += 1 * (dayno/CYCLE_1)
dayno = dayno % CYCLE_1
यह किसी भी तारीख के लिए हे (1) में चलाता है , और ऐसा लगता है कि यह 1 9 70 के करीब उचित तारीखों के लिए भी तेज होना चाहिए।
तो, यह मानते हुए कि मिनिक्स डेवलपर्स स्मार्ट लोग हैं जिन्होंने इसे कारण के लिए अपना रास्ता बनाया है, और शायद मैं सी के बारे में थोड़ा और जानता हूं , क्यूं कर?
यह * लग रहा है * जैसे कि यह तेजी से होना चाहिए। आपको अपने आर्किटेक्चर के बारे में सोचना होगा और कितनी तेजी से गुणा जैसे कुछ निर्देश हैं और आपके पास एक शाखा भविष्यवाणी करने वाला कितना अच्छा है (अधिकांश बहुत अच्छे हैं)। @jim mcnamara के कुछ दिलचस्प परिणाम हैं। – BobbyShaftoe