यह एक अच्छा उदाहरण है कि "worse is not always better"।
न्यू जर्सी दृष्टिकोण
"पारंपरिक" भाषाओं, C/C++/जावा की तरह, हार्डवेयर क्षमताओं, जैसे के आधार पर सीमा पूर्णांक arithmetics सीमित है, int32_t
- पर हस्ताक्षर किए 32-बिट नंबर जो चुपचाप अतिप्रवाह जब परिणाम 32 बिट्स में फिट नहीं है। यह बहुत तेज़ है और अक्सर व्यावहारिक उद्देश्यों के लिए पर्याप्त अच्छा लगता है, लेकिन बग खोजने के लिए सूक्ष्म कठोर कारण बनता है।
एमआईटी/स्टैनफोर्ड शैली
लिस्प ने एक अलग दृष्टिकोण लिया।
यह एक "छोटे" अनबॉक्स्ड पूर्णांक प्रकार fixnum
, और जब fixnum arithmetics का परिणाम एक fixnum
में फिट नहीं करता है, यह स्वचालित रूप से और पारदर्शी रूप से, एक मनमाना आकार bignum
करने के लिए प्रोत्साहित किया जाता है, ताकि आप हमेशा गणितीय सही परिणाम प्राप्त है। इसका मतलब है कि, जब तक संकलक साबित कर सकता है कि परिणाम fixnum
है, तो उसे कोड जोड़ना होगा जो जांच करेगा कि bignum
आवंटित किया जाना है या नहीं। वास्तव में, आधुनिक वास्तुकला पर 0 लागत होनी चाहिए, लेकिन 4+ दशकों पहले इसे एक गैर-मामूली निर्णय था।
"पारंपरिक" भाषाओं, जब वे bignum arithmetics प्रस्तुत करते हैं, ऐसा एक "पुस्तकालय" में जिस तरह से, जैसे कि,
- यह स्पष्ट उपयोगकर्ता द्वारा अनुरोध किया हो गया है;
- बिग्नम्स एक बेकार तरीके से संचालित होते हैं:
BigInteger.add(a,b)
a+b
के बजाय;
- वास्तविक संख्या छोटी होने पर भी लागत होती है और मशीन int में फिट होगी।
ध्यान दें कि लिस्प दृष्टिकोण कुछ अतिरिक्त जटिलता की संभावित लागत पर doing the right thing की लिस्प परंपरा के अनुरूप है। यह स्वचालित स्मृति प्रबंधन में भी प्रकट होता है, जो अब मुख्यधारा है, लेकिन अतीत में दुष्कर्म पर हमला किया गया था।पूर्णांक अंकगणित के लिए लापरवाही दृष्टिकोण अब कुछ अन्य भाषाओं (उदाहरण के लिए, पायथन) में उपयोग किया गया है, इसलिए प्रगति हो रहा है!
दिन की कई भाषाओं ने हार्डवेयर-निर्भर मॉड्यूलो अंकगणित से अंकगणित करने की कोशिश नहीं की। कई लोकप्रिय भाषाएं अभी भी ऐसा नहीं करती हैं (जावा या सी ++)। हालांकि कई लोगों के पास "बिग्नम" या "बिगिनटेगर" पुस्तकालय हैं। द्वितीय श्रेणी के नागरिक होने के नाते, इन पुस्तकालयों में प्रायः एक ओवरहेड होता है, जैसे कि जावा में मुक्केबाजी। –