1980 में, Intel ने 8087 चिप पेश की, जिससे IBM PC और अन्य प्रणालियों में दशमलव बिंदु ऑपरेशन बहुत तेज हो गए। हालांकि 8087 टैन्जेंट, वर्गमूल और लघुगणक जैसी उन्नत संचालन का समर्थन करता है, लेकिन यह लेख बुनियादी अंकगणित संचालन: जोड़ और घटाव पर केन्द्रित है। 8087, 8086 प्रोसेसर की तुलना में, जोड़ में लगभग 100 गुना तेजी प्रदान की और जटिल संचालन और भी अधिक।
8087 के सर्किट की खोज के लिए, मुझे चिसल से चिप का ढक्कन हटाना पड़ा और माइक्रोस्कोप का उपयोग करके नीचे दी गई उच्च-रिज़ॉल्यूशन छवि बनानी पड़ी। माइक्रोकोड ROM चिप के केंद्र में बड़ा आयताकार क्षेत्र है, जिसमें 1648 माइक्रो-निर्देश हैं जो चिप को नियंत्रित करते हैं। चिप के निचले भाग (लाल बॉक्स) डेटापाथ है, जो 80-बिट मानों पर floating-point कैलकुलेशन करता है।
8087 के डेटापाथ का क्लोज-अप उन कार्यात्मक ब्लॉक्स को दिखाता है जो जोड़ और घटाव के लिए उपयोग किए जाते हैं। मुख्य घटक केंद्र में स्थित पूर्णांक एडर है। यह एक तर्क B रजिस्टर से और अस्थायी रजिस्टर या स्टैक रजिस्टर जैसे घटक से एक तर्क प्राप्त करता है। एडर का आउटपुट सम रजिस्टर में संग्रहीत किया जाता है। शिफ्टर एक मान की बिट्स को बायें या दायें स्थानांतरित कर सकता है। शिफ्टर डाई पर बहुत जगह घेरता है क्योंकि इसकी सर्किट्री एक मान को किसी भी संख्या में बिट्स द्वारा जल्दी से स्थानांतरित करने की अनुमति देती है। दशमलव बिंदु ऑपरेशन शिफ्टर का उपयोग करके मानों को संरेखित करने के लिए भारी रूप से निर्भर करते हैं; अग्रणी शून्य सर्किट एक मान के बायें तरफ शून्य बिट्स या बाइट्स की संख्या की गणना करता है ताकि उन्हें हटाया जा सके। एक्सपोनेंट कन्वर्टर एक्सपोनेंट्स को संसाधित करता है, ओवरफ्लो और अंडरफ्लो का पता लगाता है। इन विशेष सर्किट्स ने 8087 को इसकी उच्च प्रदर्शन प्राप्त करने में मदद की।
अधिकांश कंप्यूटर संख्याओं के लिए पूर्णांक के रूप में बुनियादी प्रतिनिधित्व का उपयोग करते हैं। लेकिन कई एप्लिकेशन को दशमलव बिंदु वाले संख्याओं, जैसे 1.23 की आवश्यकता होती है। इसके अलावा, पूर्णांक की सीमा बहुत सीमित है: 32-बिट पूर्णांक लगभग -2 अरब से 2 अरब के बीच की संख्याओं को व्यक्त कर सकता है। इन समस्याओं को हल करने के लिए, कंप्यूटर आमतौर पर floating-point संख्याओं को लागू करते हैं, जो विशाल सीमा में भिन्न संख्याएं प्रदान करते हैं। ज्यादातर मामलों में, एक floating-point संख्या को चिन्ह × significand × 2^exponent द्वारा दर्शाया गया है। significand एक बाइनरी संख्या है, रूप 1.bbb…: एक नेतृत्व 1, उसके बाद बाइनरी पॉइंट (दशमलव बिंदु का बाइनरी समकक्ष) और शेष बिट्स।
एक बाइनरी संख्या में, प्रत्येक बिट 2 की एक शक्ति का प्रतिनिधित्व करता है। भिन्न भाग के लिए, बिंदु के बाद की शक्तियां ऋणात्मक होती हैं: 2^-1, 2^-2, और इसी तरह। तो बाइनरी संख्या 1.1 1 + 1/2 है, या दशमलव में 1.5। इसी तरह, बाइनरी 1.0011 1 + 1/8 + 1/16 है, या 1.1875। एक्सपोनेंट significand की सीमित सीमा से बाहर निकलने वाली संख्याओं को अनुमति देता है। उदाहरण के लिए, 1.1 (बाइनरी) × 2^8 384 है। बड़े एक्सपोनेंट के साथ, floating-point संख्याएं विशाल सीमा को कवर कर सकती हैं; भले ही 32-बिट छोटा floating-point संख्या 10^-36 से 10^38 से अधिक सीमा को कवर करती है।
फ्लोटिंग-पॉइंट एडिशन और घटाव पूर्णांक ऑपरेशन की तुलना में अधिक जटिल हैं। संख्याओं को जोड़ने (या घटाने) से पहले, उनके बाइनरी पॉइंट को संरेखित करना आवश्यक है, जैसे दशमलव संखलाओं के दशमलव बिंदुओं को संरेखित करना। ऑपरेशन के बाद, परिणाम के एक्सपोनेंट को समायोजित करना आवश्यक है, significand को normalizing ताकि यह 1 बिट से शुरू हो। एक साधारण floating-point एडिशन के चरण। ऊपर दिया गया चित्र एक साधारण floating-point एडिशन: 13.5 + 3.5 को दर्शाता है। पहली दो पंक्तियां दो तर्कों को दर्शाती हैं, एक एक्सपोनेंट और significand के साथ। दोनों तर्क normalizados हैं, तो सबसे बायाँ बिट एक 1 है। एडिशन से पहले, दूसरा तर्क must be aligned—ma...
स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित