हमारे कंप्यूटर में विभाजन कैसे होता है?


17

डिजिटल कंप्यूटर के अंदर विभाजन कैसे होता है? इसके लिए एल्गोरिथ्म क्या है?

मैंने Google में कठिन खोज की है लेकिन संतोषजनक परिणाम नहीं मिला है। कृपया एक नमूना चित्रण के साथ विभाजन एल्गोरिथ्म के लिए एक बहुत स्पष्ट एल्गोरिथ्म / फ़्लोचार्ट प्रदान करें ।


1
ALU में @ प्रोग्राम-ओ-स्टेप डिवीजन एक जटिल ऑपरेशन है। आपको "सरल" फ़्लोचार्ट नहीं मिलेगा।
मजेंको नोव

5
@ लियोन हेलर ओह! यह ऐसा नहीं कहता है यह एक शुद्ध हार्डवेयर प्रश्न है
कार्यक्रम-ओ-स्टीव

2
@ लियोन हेलर मुझे लगता है कि यह ....
कार्यक्रम-ओ-स्टीव

2
माइक्रोकंट्रोलर्स में विभाजन सीधे आगे नहीं है। इसे करने के तेज़ तरीके और धीमे तरीके हैं। धीमे तरीके से समझना आसान है लेकिन आधुनिक सीपीयू में तेजी से तरीके का उपयोग किया जाता है जो आप विशेष रूप से जानना चाहते हैं? क्या आप सिर्फ सिद्धांतों की बुनियादी समझ चाहते हैं या आधुनिक सीपीयू का विस्तृत विश्लेषण चाहते हैं?
कोन्सालिक 12

4
@ लॉनहेलर मैं आमतौर पर आपके द्वारा बंद किए जाने वाले प्रश्नों से सहमत हूं, लेकिन सीपीयू डिजाइन एक इलेक्ट्रिकल इंजीनियरिंग प्रश्न है। यह प्रश्न कुछ मदद का उपयोग करके यह स्पष्ट कर सकता है कि वांछित क्या है (जैसे कोनसाकिक के बारे में पूछ रहा है), लेकिन यह इसे बंद विषय नहीं बनाता है।
कालेनजब

जवाबों:


17

डिजिटल डिजाइन में डिवीजन एल्गोरिदम को दो मुख्य श्रेणियों में विभाजित किया जा सकता है। धीमा विभाजन और तेज विभाजन।

मेरा सुझाव है कि अगर आप अभी तक इन अवधारणाओं से परिचित नहीं हैं, तो बाइनरी जोड़ और घटाव कैसे काम करते हैं, इस पर आप पढ़ेंगे।

धीमा विभाजन

सबसे सरल धीमी विधियाँ निम्नलिखित तरीके से काम करती हैं: भाजक को अंश से घटाएँ। प्रत्येक घटाव के परिणाम के साथ पुनरावृत्ति करें जब तक कि शेष भाजक से कम न हो। पुनरावृत्तियों की राशि पूर्णांक भागफल है, और शेष राशि शेष है।

उदाहरण:

7/3:

  1. 73=4
  2. 43=1
  3. 1<3

इस प्रकार उत्तर 1 के शेष के साथ 2 है। इस उत्तर को और अधिक प्रासंगिक बनाने के लिए, यहां कुछ पृष्ठभूमि है। नकारात्मक के अलावा के माध्यम से बाइनरी घटाव का प्रदर्शन किया जाता है जैसे: 7 - 3 = 7 + (-3)। यह इसके दो के पूरक का उपयोग करके पूरा किया गया है। प्रत्येक बाइनरी नंबर को पूर्ण योजक की एक श्रृंखला का उपयोग करके जोड़ा जाता है:

यहां छवि विवरण दर्ज करें

जहां प्रत्येक 1-बिट पूर्ण योजक निम्नानुसार लागू होता है:

यहां छवि विवरण दर्ज करें

फास्ट डिवीजन

जबकि विभाजन की धीमी विधि को समझना आसान है, इसके लिए पुनरावृत्ति पुनरावृत्तियों की आवश्यकता होती है। विभिन्न "तेज" एल्गोरिदम मौजूद हैं, लेकिन वे सभी अनुमान पर भरोसा करते हैं।

गोल्डस्मिड विधि पर विचार करें:

मैं निम्नलिखित का उपयोग करूँगा:

Q=ND

यह विधि इस प्रकार काम करती है:

  1. एक अंश F के साथ N और D को इस तरह से गुणा करें कि D 1 से पास हो।
  2. जैसा कि डी 1 के पास है, एन क्यू के पास जाता है

यह विधि पुनरावृत्ति जोड़ के माध्यम से द्विआधारी गुणा का उपयोग करती है, जिसका उपयोग आधुनिक एएमडी सीपीयू में भी किया जाता है।


1
'धीमी' विधि (हार्डवेयर डिवाइड के बिना माइक्रोस पर विधानसभा में लागू की गई) पर भिन्नता के लिए कुछ फ़्लोचार्ट, Atmel के AVR200 एपनोट में दिए गए हैं ।
केविन वर्मेयर

क्या आप कृपया सुनार के विभाजन की विधि पर एक दृष्टांत दे सकते हैं । साथ ही यहाँ दिया गया फ्लो चार्ट धीमी श्रेणी का एक उदाहरण है?
कार्यक्रम-ओ-स्टीव

वह कौन सी विधि है जिसमें हमें बार-बार लाभांश को बाईं ओर स्थानांतरित करना होगा?
कार्यक्रम-ओ-स्टीव

@ प्रोग्राम-ओ-स्टेव यहां एक त्वरित चित्रण है: 22/7 (पाई सन्निकटन) ढूंढें। सबसे पहले, पाने के लिए 0.1 से गुणा और नीचे: 2.2 / 0.7 को फिर से गुणा करें। 1.3 का उपयोग करते हुए, 2.86 / 0.91 का उपयोग करते हुए 1.09 देता है: 3.1174 / 0.9919 1.008 देता है: 3.1423393 / 0.9998352 चलते रहें, आप जल्द ही अंतिम उत्तर 3.1428571 / तक पहुंच जाएंगे। 1.000000 ...
एलन कैंपबेल

आप "एक अंश से गुणा" कैसे करते हैं? फ़्लोटिंग फ़्लोटिंग पॉइंट में प्रतिनिधित्व करने योग्य नहीं हैं। परिभाषा के अनुसार एक अंश भाजक द्वारा विभाजित किया गया है, इसलिए आपको विभाजित करने के लिए अभी भी एक परिपत्र तर्क में छोड़ दिया गया है। और पहली बार में उस अंश का अनुमान कैसे लगाया जाता है?
CogitoErgoCogitoSum

5

फ्लोटिंग पॉइंट डिवीजन के लिए हार्डवेयर एक तर्क इकाई का हिस्सा है जो गुणा भी करता है; एक गुणक हार्डवेयर मॉड्यूल उपलब्ध है। फ़्लोटिंग पॉइंट संख्या, ए और बी कहते हैं, (ए / बी बनाने) से विभाजित हैं

  1. फ़्लोटिंग पॉइंट नंबरों को साइन (+1 या -1), मंटिसा ("ए" और "बी", और बाइनरी पूर्णांक प्रकार) घातांक में बदल कर
  2. परिणाम का संकेत है (+1) यदि दोनों चिह्न समान हैं, तो (-1)
  3. प्रतिपादक को घटाया जाता है (B के घातांक को A के घातांक से घटाया जाता है) परिणाम के प्रतिपादक को बनाने के लिए
  4. mantissas (संख्याओं के द्विआधारी अंक) 1/2 और 1 के बीच एक निश्चित-बिंदु द्विआधारी संख्या है; इसका मतलब है कि द्विआधारी बिंदु के बाद पहला अंक '1' है, इसके बाद शून्य और दूसरे हैं ... पहले चरण के रूप में, एक लुकअप तालिका पारस्परिक को छह बिट्स में सटीक लगती है (केवल 32 संभावनाएं हैं, यह एक छोटी तालिका है)

  5. =*आरसीमैंपीआरसीएल()*आरसीमैंपीआरसीएल()

  6. ==1+ε
    *(2-)=(1+ε)×(1-ε)=1-ε2
    इसका तात्पर्य यह है कि हर में हमारा पांच-बिट सटीक 'एक' गुणन की एक और जोड़ी के बाद दस-बिट सटीक हो जाएगा, दो के बाद बीस-बिट सटीक और तीन के बाद चालीस-बिट सटीक होगा। अपने परिणाम की सटीकता की आवश्यकता के रूप में अंश (और - हर) से गुणक को गुणा करने के कई पुनरावृत्तियों को करें।
  7. अंश, अब है कि भाजक बिल्कुल '1' है, परिणाम का मंटिसा है, और पहले गणना किए गए संकेत और घातांक के साथ जोड़ा जा सकता है।
  8. IEEE फ़्लोटिंग पॉइंट कुछ अपवादों की अनुमति देता है (अकारण संख्याएँ, NAN; जिन्हें अन्य तार्किक परिचालनों द्वारा नियंत्रित किया जाना है।

दिलचस्प बात यह है कि पुराना पेंटियम डिवाइड बग (1994 में बहुत ही नया) एक प्रिंटिंग त्रुटि के कारण था, जिसने चरण (4) के लिए दोषपूर्ण पारस्परिक-तालिका मान बना दिया था। एक प्रारंभिक पेपर, "ए डिवीजन मेथड इज़ ए पैरेलल मल्टीप्लायर", डोमेनिको फेरारी, IEEE ट्रांस। इलेक्ट्रॉन। कंप्यूटर। EC-16 / 224-228 (1967), विधि का वर्णन करता है, जैसा कि "आईबीएम सिस्टम / 360 मॉडल 91: फ़्लोटिंग-पॉइंट एक्ज़ेक्यूशन यूनिट" IBM J. Res करता है। देव। 11 : 34-53 (1967)।


1

विभाजन के लिए बहुत अलग तरीके हैं, जो संभाले जाने वाली संख्याओं पर निर्भर करता है। पूर्णांकों के लिए, दूसरों द्वारा दी गई शिफ्ट और घटाव विधि ठीक काम करेगी। फ़्लोटिंग पॉइंट नंबरों के लिए, हालांकि, यह पहले हर के पारस्परिक गणना करने के लिए तेज़ हो सकता है और फिर उस समय के अपने अंश को गुणा कर सकता है।

हर के पारस्परिक की गणना इतनी बुरी नहीं है; यह क्रमिक अनुमानों को परिष्कृत करके किया जाता है। जी 1 / डी के लिए आपका अनुमान होने दें। एक बेहतर अनुमान के लिए, g '= g (2-gd) का उपयोग करें। यह द्विघात रूप से परिवर्तित होता है, इसलिए आप प्रत्येक सुधार पर सटीक के अंकों को दोगुना करते हैं।

उदाहरण: 3.5 की पारस्परिक गणना।

आपका प्रारंभिक अनुमान 0.3 है। आप 0.3 * 3.5 = 1.15 की गणना करते हैं। आपका समायोजित अनुमान 0.3 * (2 - 1.15) = 0.285 है। पहले से ही बहुत करीब! प्रक्रिया को दोहराएं, और आपको 0.2857125 मिलता है, और तीसरी कोशिश में 0.2857142857 मिलता है।

कुछ शॉर्टकट हैं। फ्लोटिंग पॉइंट में, आप अपनी मशीन की संख्या के आधार पर दस या दो की शक्तियों को निकाल सकते हैं। और, अधिक से अधिक मेमोरी उपयोग की कीमत पर गति के लिए, आप अनुमान लगाने के लिए 1 से b (जहाँ b आपका नंबर आधार है) की संख्या के लिए पूर्व-गणना की गई तालिका का उपयोग कर सकते हैं जो कि आवश्यक पारस्परिक और तुरंत के करीब है एक या दो शोधन कदम बचाएं।

Keep in mind that, as with multiplication and Kolmogorov's 1960 embarrassment by his student Anatoly Karatsuba, you never know when a faster or better method will be found. Never surrender your curiosity.


-1

कंप्यूटर संख्याओं को गुणा करने के अतिरिक्त नहीं करते - यह वास्तव में धीमा होगा। इसके अलावा, कुछ तेज़ गुणन एल्गोरिदम हैं। बाहर की जाँच करें: http://en.wikipedia.org/wiki/Karatsuba_algorithm


EE.SE में आपका स्वागत है। लिंक-केवल उत्तर हतोत्साहित किए जाते हैं। कृपया लिंक में दी गई जानकारी को संक्षेप में बताएं।
नल

वे करते हैं। CPU के टोंस में अभी भी सिंगल साइकल मल्टीप्लायर नहीं है और सॉफ्टवेयर म्यूटिलेशन का उपयोग करता है।
user3528438
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.