2010-06-17 18 views
19

कंप्यूटर 2 गुना पर गुणा करने के लिए कैसे करता है 100 * 55.कंप्यूटर 2 संख्याओं को कैसे बढ़ाता है?

मेरा अनुमान था कि कंप्यूटर ने गुणा को प्राप्त करने के लिए दोहराया। बेशक यह पूर्णांक संख्याओं के मामले हो सकता है। हालांकि फ्लोटिंग पॉइंट नंबरों के लिए कुछ अन्य तर्क होना चाहिए।

नोट: यह एक साक्षात्कार में पूछा गया था।

+4

बेशक नहीं, [गुणा एल्गोरिदम] देखें (http://en.wikipedia.org/wiki/Multiplication_algorithm) –

+0

तो आप कहने का मतलब है कि संख्याओं की लंबाई या मूल्य के आधार पर अलग-अलग एल्गोरिदम का उपयोग किया जाएगा। – ckv

उत्तर

21

दोहराया गया जोड़ संख्याओं को गुणा करने के लिए एक बहुत ही अक्षम तरीका होगा, 85324154 द्वारा 1298654825 गुणा करने की कल्पना करें। बाइनरी का उपयोग करके लंबे गुणा का उपयोग करने के लिए बहुत तेज़ है।

1100100 
0110111 
======= 
0000000 
-1100100 
--1100100 
---0000000 
----1100100 
-----1100100 
------1100100 
============== 
1010101111100 

फ़्लोटिंग पॉइंट संख्याओं के लिए वैज्ञानिक नोटेशन का उपयोग किया जाता है।

100 is 1 * 10^2 (10 to the power of 2 = 100) 
55 is 5.5 * 10^1 (10 to the power of 1 = 10) 

गुणा उन्हें एक साथ mantissas गुणा और एक्स्पोनेंट्स

= 1 * 5.5 * 10^(2+1) 
= 5.5 * 1000 
= 5500 

कंप्यूटर इस द्विआधारी समकक्ष

100 = 1.1001 * 2^6 
55 = 1.10111* 2^5 
-> 1.1001 * 1.10111 * 2^(6+5) 
1

का उपयोग कर Intuitively आप भी स्थानांतरण का उपयोग करके बार-बार अतिरिक्त कम से कम कर सकते हैं जोड़ने के लिए करता है ।

तैरता के संदर्भ में इस लेख बहुत प्रासंगिक लग रहा है:

http://oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_14/CH14-1.html#HEADING1-19

10

विधि है कि आमतौर पर उदाहरण होने 100*55 यह

की तरह कुछ करना होगा के लिए, प्रयोग किया जाता है तो आंशिक उत्पादों इंसानों की तरह कर कहा जाता है
100 X 
    55 
---- 
    500 + 
500 
---- 

असल में पुराने दृष्टिकोणों ने एक शिफ्ट-और-संचित एल्गोरिदम का उपयोग किया जिसमें आप आंशिक उत्पाद को स्थानांतरित करते समय योग रखते हैं दूसरे नंबर के प्रत्येक अंक के लिए है। इस दृष्टिकोण की एकमात्र समस्या यह है कि संख्या 2-पूरक में संग्रहीत की जाती है ताकि आप स्थानांतरण करते समय थोड़ा सा गुणा प्रति सादा नहीं कर सकें।

आजकल अधिकांश अनुकूलन केवल 1 चक्र में सभी आंशिक योगों को समेटने में सक्षम हैं जिससे आप तेजी से गणना और आसानी से समानांतरता प्राप्त कर सकते हैं।

यहाँ एक नज़र डालें: http://en.wikipedia.org/wiki/Binary_multiplier

अंत में आप

+0

तो कंप्यूटर में प्रोसेसर में उपयोग करने वाला कोई भी तरीका या एल्गोरिदम नहीं है। डेटा के आधार पर अलग-अलग एल्गोरिदम का चयन किया जाता है। अगर मैं गलत हूं कृपया मुझे सही। – ckv

+0

इस तरह से, आपको अभी भी 100x5 गुणा करना है, है ना? – bragboy

+0

दशमलव में आपको 100 * 5 और 10 * 5 गुणा करना है, लेकिन बाइनरी में आप 1 या 0 से गुणा करते हैं, जिसका अर्थ है कि आप इसे जोड़ते हैं या आप नहीं करते हैं। –

3

एक तरह से जैसे कुछ कार्यान्वयन पा सकते हैं लंबे समय से गुणा उपयोग कर रहा है , बीना में आरई:

 01100100 <- 100 
    * 00110111 <- 55 
    ---------- 
     01100100 
     01100100 
    01100100 
    01100100 
    01100100 
--------------- 
    1010101111100 <- 5500 

इसे कभी-कभी shift and add विधि कहा जाता है।

3

कंप्यूटर बूथ के एल्गोरिदम या अन्य एल्गोरिदम का उपयोग करते हैं जो अंकगणितीय परिचालनों के लिए स्थानांतरण और जोड़ते हैं। यदि आपने कंप्यूटर आर्किटेक्चर कोर्स का अध्ययन किया था, तो कंप्यूटर आर्किटेक्चर पर किताबें इन एल्गोरिदम का अध्ययन करने के लिए एक अच्छी जगह होनी चाहिए।

1

उत्तर है, यह निर्भर करता है। जैसा कि अन्य ने इंगित किया है, आप उसी एल्गोरिदम का उपयोग कर सकते हैं जैसा कि हमें स्कूल में पढ़ाया जाता था, लेकिन इसके बजाय बाइनरी का उपयोग किया जाता था। लेकिन छोटी संख्या के लिए अन्य तरीके हैं।
कहें कि आप दो 8 बिट संख्याओं को गुणा करना चाहते हैं, यह एक बड़ी लुकअप टेबल के साथ किया जा सकता है। आप बस 16 बिट संख्या बनाने के लिए दो 8 बिट संख्याओं को संयोजित करते हैं और उस ननबर का उपयोग सभी उत्पादों के साथ तालिका में इंडेक्स करने के लिए करते हैं।
या, आप केवल गेट्स का एक बड़ा नेटवर्क कर सकते हैं जो फ़ंक्शन को सीधे तरीके से गणना करता है। हालांकि, इन गेट नेटवर्क को बड़ी संख्या में गुणा के लिए काफी अनावश्यक होना पड़ता है।

1

दो चल बिन्दु संख्या गुणा करने के लिए निम्न प्रक्रिया प्रयोग किया जाता है:

  1. गुणा mantissas
  2. जोड़े एक्स्पोनेंट्स
  3. परिणाम सामान्यीकृत करें (दशमलव बिंदु पहली गैर शून्य अंक के बाद है)

तो, बेस 10 में 5.1E3 और 2.6E-2

मल्टीप ly mantissas => 5.1 * 2.6 = 13.26 (नायब इस पूर्णांक गुणन साथ किया जा सकता जब तक कि आप ट्रैक जहां दशमलव बिंदु होना चाहिए)

एक्स्पोनेंट्स => 3 + -2 = 1

जोड़े हमें 13.26E1

मानक के अनुसार 13.26E1 का एक परिणाम> 1.326E2

3

ठीक है, फिर जाना = देता है। मैं इस एक समय पहले (1987!) लिखा था, इसलिए कुछ चीजें बदल गई हैं, जबकि अन्य एक ही रहेगा ...

http://moneybender.com/transactor_article.pdf

+0

अच्छा लेख, बहुत उपयोगी है – Nick

1

मैं बस एक साधारण कार्यक्रम कलन विधि का उपयोग फ़ाइल में 2 लाइन में संग्रहीत दो संख्या गुणा कोड लंबे गुणा।

  23958233 
      5830 × 
     ------------ 
      00000000 (=  23,958,233 ×  0) 
      71874699 (=  23,958,233 × 30) 
      191665864 (=  23,958,233 × 800) 
     119791165 (=  23,958,233 × 5,000) 

स्रोत कोड:: यह नंबर दो जो 1 अरब से अधिक एक दूसरे को

उदाहरण में संख्या है गुणा कर सकते हैं

समीक्षा करने और अपनी टिप्पणी देने के http://code.google.com/p/juniormultiply/source/browse/#svn/trunk/src

संबंधित मुद्दे