8-बिट बाइनरी संख्या के वर्गमूल की गणना


14

मैं केवल डिजिटल संयोजन या अनुक्रमिक तर्क का उपयोग करके किसी दिए गए 8-बिट संख्या के वर्गमूल की गणना करने के तरीके की तलाश कर रहा था। क्या यह संभव है?

एक तरीका सिर्फ एक नज़र तालिका का उपयोग करने के लिए हो सकता है क्योंकि मैं भिन्नात्मक भागों पर विचार नहीं कर रहा हूं (इसलिए ), लेकिन इससे बेहतर तरीका होना चाहिए। क्या कोई मुझे इशारा कर सकता है?103


4
मैं श्रेणियों के साथ एक साधारण लुकअप तालिका का उपयोग करेगा। प्रत्येक आउटपुट के लिए न्यूनतम संख्या और अधिकतम और आप बस जाँच करें।
21

6
एक खोज बहुत आसान लगती है। आखिरकार, 8 बिट संख्या के वर्गमूल के लिए केवल 16 संभावित उत्तर हैं।
ओलिन लेट्रोप

3
हम्म .. केवल उत्तर 0000 से 1111 तक हैं; केवल 64 या अधिक इनपुटों के उत्तर में सबसे ऊपरी बिट सेट होगा, इसलिए यह इनपुट के शीर्ष दो बिट्स का केवल एक है। अब आपके पास कम करने के लिए केवल 8 बिट्स के तीन कार्य हैं ..
JustJeff

जवाबों:


9

टिप्पणियों में लुकअप तालिकाओं का उल्लेख किया गया है। दो दृष्टिकोण हैं।

फास्ट
प्रत्येक बाइट को एक समान सूचकांक के वर्गाकार मूल के साथ एक 256 बाइट्स लंबी तालिका बनाएँ। यह तेजी से है क्योंकि आप सीधे सही मान तक पहुंचने के लिए तर्कों के रूप में तर्क का उपयोग करते हैं। दोष यह है कि इसे एक लंबी तालिका की आवश्यकता है, जिसमें बहुत सारे डुप्लिकेट मान हैं।

कॉम्पैक्ट के
अनुसार, एक 8-बिट पूर्णांक में केवल 255 के माध्यम से मान हो सकते हैं, और संबंधित वर्ग की जड़ें 16 (गोल) के माध्यम से 0 हैं। एक 16 प्रविष्टि तालिका (शून्य-आधारित) n-वें प्रविष्टि के साथ उस तर्क के लिए अधिकतम मान का निर्माण करें जिसके लिए वर्गमूल n है। तालिका इस तरह दिखाई देगी:

 0  
 2  
 6  
12  
20
etc.

आप तालिका के माध्यम से चलते हैं और रुक जाते हैं जब आप अपने तर्क के बराबर या उससे अधिक मूल्य का सामना करते हैं। उदाहरण: 18 का वर्गमूल

set index to 0
value[0] = 0, is less than 18, go to the next entry  
value[1] = 2, is less than 18, go to the next entry  
value[2] = 6, is less than 18, go to the next entry  
value[3] = 12, is less than 18, go to the next entry
value[4] = 20, is greater than or equal to 18, so sqrt(18) = 4

जबकि फास्ट लुकअप टेबल का एक निश्चित निष्पादन समय (सिर्फ एक लुकअप) होता है, यहां निष्पादन समय अधिक मूल्य तर्क के लिए लंबा है।

दोनों तरीकों के लिए जाता है कि, तालिका के लिए अलग-अलग मानों को चुनकर, आप वर्गमूल के लिए एक गोल या छंटनी के बीच का चयन कर सकते हैं।


2
यदि आप उस तालिका को उल्टा करते हैं, तो आपको औसतन कम पुनरावृत्तियों की आवश्यकता होगी
फेडेरिको रूसो

छोटी मेज पर एक द्विआधारी खोज औसत पर अल्गोरिथम को गति दे सकती है। आप लुकअप टेबल (स्थिति 8) के माध्यम से आधा रास्ता शुरू करते हैं, फिर आप तय करते हैं कि क्या पाया गया मूल्य बहुत अधिक या बहुत कम है और आप 4 स्थानों पर या 4 नीचे जाते हैं। तब तक दोहराएं।
जिप्पी

7

8 बिट्स में काम करना, आप मूल रूप से पूर्णांक समाधानों के लिए विवश हैं। यदि आपको X के वर्गमूल की आवश्यकता है, तो निकटतम आप प्राप्त कर सकते हैं सबसे बड़ा पूर्णांक जिसका वर्ग X से कम या बराबर है। उदाहरण के लिए, sqrt (50) के लिए आपको 7 मिलेगा, क्योंकि 8 * 8 से अधिक होगा 50।

तो यहाँ ऐसा करने के लिए एक चाल है: गिनें कि कितने विषम संख्याएँ हैं, 1 से शुरू होकर, आप X से घटा सकते हैं। आप इसे तर्क के साथ कर सकते हैं: 8-बिट रजिस्टर R1 काम करने का मान रखता है, एक 7-बिट काउंटर R2 (अधिकांश) विषम संख्या रखता है, और एक 4-बिट काउंटर R3 परिणाम रखता है। रीसेट करने पर, R1 को X के मान से लोड किया जाता है, R2 को शून्य में साफ़ किया जाता है, और R3 को शून्य पर साफ़ किया जाता है। 8-बिट सबट्रैक्टर सर्किट को 'ए' इनपुट के लिए आर 1 खिलाया जाता है, और 'बी' इनपुट के लिए '1' (पुल-अप के माध्यम से) पर तय किए गए एलएसबी के साथ संयुक्त आर 2 का मान। सबट्रैक्टर 8-बिट अंतर AB और एक उधार बिट के आउटपुट देता है। प्रत्येक घड़ी में, यदि उधार बिट स्पष्ट है, तो R1 को सबट्रैक्टर आउटपुट के साथ लोड किया जाता है, आर 2 को बढ़ाया जाता है, और आर 3 को बढ़ाया जाता है। यदि उधार बिट सेट किया गया है, तो आर 1 लोड नहीं किया गया है और आर 2, आर 3 में वृद्धि नहीं हुई है, बी / सी परिणाम अब आर 3 में तैयार है।

वैकल्पिक

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


मैं यह सब रात भर कर रहा है। आउटपुट में 8 का बिट स्पष्ट रूप से दो सबसे महत्वपूर्ण इनपुट बिट्स का एक फ़ंक्शन है। इसी तरह, मुझे लगता है कि आउटपुट में 4 का बिट केवल शीर्ष 4 इनपुट बिट्स का एक फ़ंक्शन है: 00x1, 001x, 1xx1, और 11x1 इसे सेट करने के लिए लगता है। बाद में इसका सत्यापन करेंगे।
जस्टजेफ

1
यदि आप FPGA में ऐसा कर रहे हैं, तो आप इसे एक बड़े caseविवरण में फेंक सकते हैं और संश्लेषण उपकरण को सभी काम करने दे सकते हैं। एक तरफ यह वितरित रैम में एक बड़े लुक-अप टेबल की तरह है (इसका उपयोग ROM के रूप में किया जाता है); दूसरी ओर, टूल को आपकी टिप्पणी में उल्लिखित अनुकूलन प्राप्त करना चाहिए।
फोटॉन

5

मुझे नहीं पता कि यह कोई मदद है, लेकिन एक वर्गमूल की गणना करने का एक सरल तरीका है:

unsigned char sqrt(unsigned char num)
{
    unsigned char op  = num;
    unsigned char res = 0;
    unsigned char one = 0x40;

    while (one > op)
        one >>= 2;

    while (one != 0)
    {
        if (op >= res + one)
        {
            op -= res + one;
            res = (res >> 1) + one;
        }
        else
        {
            res >>= 1;
        }

        one >>= 2;
    }
    return res;
}

मुझे इस बारे में ज्यादा जानकारी नहीं है कि अनुक्रमिक तर्क में क्या किया जा सकता है और नहीं किया जा सकता है, लेकिन चूंकि यह एल्गोरिथ्म सिर्फ 4 छोरों में समाप्त होता है, आप इसे 4 चरणों में लागू करने में सक्षम हो सकते हैं।


4

28

    A =     a
     or     b;

    B =     a and     b
     or not b and     c
     or not b and     d;

    C =     a and     b and     c
     or     a and     b and     d
     or     a and not b and not c and not d
     or     a and not c and not d and     e
     or     a and not c and not d and     f
     or not a and     c and     d
     or not a and     c and     e
     or not a and     c and     f
     or not a and not b and not d and     e
     or not a and not b and not d and     f;

     D =     a and     b and     c and     e
     or     a and     b and     c and     f
     or     a and     c and     d
     or     a and not b and not c and not d
     or     a and not b and not d and     e and     f
     or     a and not b and not d and     e and     g
     or     a and not b and not d and     e and     h
     or     a and not c and not d and not e and not f
     or     b and     c and not d and not e and not f and     g
     or     b and     c and not d and not e and not f and     h
     or not a and     b and not c and     d and     e
     or not a and     b and not c and     d and     f
     or not a and     b and not c and     d and     g
     or not a and     b and not c and     d and     h
     or not a and     c and not d and not e and not f
     or not a and     d and     e and     f
     or not a and     d and     e and     g
     or not a and     d and     e and     h
     or not a and not b and     c and not e and not f and     g
     or not a and not b and     c and not e and not f and     h
     or not a and not b and not c and     e and     f
     or not b and     c and     d and     e
     or not b and     c and     d and     f
     or not b and not c and not d and not f and     g
     or not b and not c and not d and not f and     h;

1
वाह, क्या सॉफ्टवेयर है? क्या यह मनमाने ढंग से बड़े आयामों के लिए काम करता है? आप वास्तव में उन SOP रूपों से इसे बनाने के लिए गेट्स की न्यूनतम संख्या कैसे प्राप्त करेंगे? ऐसा लगता है कि इस बिंदु पर एक cpld या बेहतर निश्चित रूप से इसे बनाने का सबसे व्यावहारिक तरीका होगा।
कैप्टनक्रिग

@ सीएमपी मेरे उत्तर में देरी के लिए क्षमा करें। मैंने यहां उपलब्ध प्रोग्राम का उपयोग किया: home.roadrunner.com/~ssolver जो सत्य तालिकाओं को स्वीकार कर सकता है - मैंने पूर्णांक वर्गमूल अंकों में से प्रत्येक के लिए एक सत्य तालिका बनाने के लिए एक साधारण पायथन स्क्रिप्ट का उपयोग किया। वास्तव में ऊपर उन एसओपी हैं एल्गोरिदम कार्यक्रम उन्हें कम करने के लिए उपयोग करता है की क्षमता की सीमा के लिए, उनके कम से कम के रूप में।
बिट्रैक्स

1
@ सीएमपी जैसा कि आप कहते हैं, यह पूर्णांक वर्गमूल को इस तरह लागू करने के लिए पागल होगा, क्योंकि कोई भी लुकअप तालिका का उपयोग कर सकता है, या पूर्णांक वर्ग रूट के लिए एल्गोरिदम में से किसी एक को कोड कर सकता है और आपकी पसंद की एचडीएल को संश्लेषित कर सकता है।
बिट्रेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.