8-বিট বাইনারি সংখ্যার বর্গমূলের গণনা করা


14

আমি কেবলমাত্র ডিজিটাল সংমিশ্রণ বা অনুক্রমিক যুক্তি ব্যবহার করে প্রদত্ত 8-বিট সংখ্যার বর্গমূলের গণনা করার একটি উপায় খুঁজছিলাম। এটা কি সম্ভব?

একটি উপায় কেবল সন্ধানের টেবিলটি ব্যবহার করা হতে পারে যেহেতু আমি ভগ্নাংশের অংশগুলি বিবেচনা করছি না (সুতরাং so ) তবে এর চেয়ে আরও ভাল উপায় থাকতে হবে। কেউ কি আমাকে ইঙ্গিত করতে পারে?103


4
আমি রেঞ্জগুলি সহ একটি সন্ধানের সহজ টেবিল ব্যবহার করব। ন্যূনতম সংখ্যা এবং প্রতিটি আউটপুট জন্য সর্বাধিক এবং আপনি ঠিক পরীক্ষা।
কর্টুক

6
একটি চেহারা বেশ সহজ বলে মনে হচ্ছে। সর্বোপরি, 8 বিটের সংখ্যার বর্গমূলের জন্য কেবল 16 টি উত্তর রয়েছে।
অলিন ল্যাথ্রপ

3
হুঁ .. কেবলমাত্র উত্তরগুলি 0000 থেকে 1111; কেবলমাত্র 64 বা ততোধিক ইনপুটগুলির উত্তরে সর্বাধিক বিট সেট থাকবে, সুতরাং এটি ইনপুটটির শীর্ষ দুটি বিটের কেবল একটি OR OR এখন আপনার কাছে 8 টি বিটের হ্রাস করার জন্য কেবলমাত্র তিনটি ফাংশন রয়েছে ..
জাস্টজেফ

উত্তর:


9

মন্তব্যগুলিতে লুক টেবিলগুলি উল্লেখ করা হয়েছে। দুটি পন্থা আছে।

দ্রুত
প্রতিটি পরবর্তী মান অনুসারে সূচকগুলির বর্গমূল সহ একটি 256 বাইট দীর্ঘ টেবিল তৈরি করুন। এটি দ্রুত কারণ আপনি সঠিক মানটি সরাসরি অ্যাক্সেস করতে সূচি হিসাবে যুক্তিটি ব্যবহার করেন। খসড়াটি হ'ল এর জন্য অনেকগুলি নকল মান সহ একটি দীর্ঘ টেবিলের প্রয়োজন।

কমপ্যাক্ট
যেমনটি বলা হয়েছে, একটি 8-বিট পূর্ণসংখ্যার কেবল 0 থেকে 255 পর্যন্ত মান থাকতে পারে এবং একই বর্গাকার শিকড় 0 থেকে 16 (বৃত্তাকার) হয়। বর্গমূলের জন্য আর্গুমেন্টের সর্বাধিক মান এন-তম এন্ট্রি সহ একটি 16 এন্ট্রি টেবিল (শূন্য-ভিত্তিক) তৈরি করুন। টেবিলটি দেখতে এমন হবে:

 0  
 2  
 6  
12  
20
etc.

আপনি যখন সারণীটি পেরিয়ে যান এবং আপনার আর্গুমেন্টের চেয়ে বড় বা সমান মানের মুখোমুখি হন তখন আপনি থামেন stop উদাহরণ: 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 বিটে কাজ করা, আপনি মূলত পূর্ণসংখ্যার সমাধানগুলিতে সীমাবদ্ধ। আপনার যদি এক্স এর বর্গমূলের প্রয়োজন হয় তবে আপনি সবচেয়ে কাছেরটি পেতে পারেন যার বর্গটি এক্স এর চেয়ে কম বা সমান example উদাহরণস্বরূপ, স্কয়ার্ট (50) এর জন্য আপনি 7 পাবেন, যেহেতু 8 * 8 এর চেয়ে বেশি হবে 50।

সুতরাং এটি করার একটি কৌশল এখানে রয়েছে: 1 দিয়ে শুরু করে কতগুলি বিজোড় সংখ্যা গণনা করুন আপনি এক্স থেকে বিয়োগ করতে পারবেন You বিজোড় সংখ্যাটি রাখে (বেশিরভাগ), এবং একটি 4-বিট কাউন্টার আর 3 ফলাফল রাখে। পুনরায় সেট করার সময়, আর 1 টি X এর মান দিয়ে লোড হয়, আর 2 শূন্যে সাফ হয়ে যায়, এবং আর 3 শূন্যকে সাফ করা হয়। একটি 8-বিট সাবট্রেক্টর সার্কিটকে 'এ' ইনপুটটির জন্য আর 1 খাওয়ানো হয়, এবং 'বি' ইনপুটটির জন্য '1' (পুল-আপের মাধ্যমে) স্থির করা এলএসবি এর সাথে মিলিত আর 2 এর মান। বিয়োগকারক একটি 8-বিট পার্থক্য AB এবং একটি orrowণ বিট আউটপুট দেয়। প্রতিটি ঘড়িতে, যদি bitণ বিটটি পরিষ্কার হয়, আর 1 সাবট্রাক্টর আউটপুট দিয়ে লোড হয়, আর 2 বাড়ানো হয় এবং আর 3 বর্ধিত হয়। Orrowণ বিট সেট করা থাকলে, আর 1 লোড হয় না এবং আর 2, আর 3 বৃদ্ধি হয় না, খ / সি ফলাফল এখন আর 3 এ প্রস্তুত।

বিকল্পভাবে

কেবলমাত্র 16 টি সম্ভব আউটপুট মান রয়েছে, সুতরাং উত্তরটি একটি চার বিট সংখ্যা। মূলত, আপনার কাছে 8 ইনপুট বিটের চারটি একক-বিট ফাংশন রয়েছে। এখন, আমি একটি 8-মাত্রিক কর্নোখ মানচিত্র আঁকতে পারি না, তবে নীতিগতভাবে আপনি উত্তরটির প্রতিটি বিটের জন্য একটি সংহত সার্কিট নিয়ে আসতে পারেন। এই চারটি সংযুক্তিযুক্ত সার্কিটগুলির আউটপুটগুলি একসাথে নিন এবং তাদের চার বিটের উত্তর হিসাবে ব্যাখ্যা করুন। Voila। কোনও ঘড়ি, কোনও নিবন্ধক নেই, কেবল এনএএনএনডি এবং এনওআর এর একগুচ্ছ যথেষ্ট হবে।


আমি সারা রাত ধরে এই শব্দ করে চলেছি। আউটপুটে 8 এর বিটটি স্পষ্টভাবে দুটি সবচেয়ে উল্লেখযোগ্য ইনপুট বিটের ফাংশন। একইভাবে, আমি আউটপুট 4 এর বিট সম্ভবত শীর্ষ 4 ইনপুট বিটের একটি ফাংশন বলে মনে করি: 00x1, 001x, 1xx1, এবং 11x1 এটি সেট করে বলে মনে হচ্ছে। এটি পরে যাচাই করবে।
জাস্টজেফ

1
যদি আপনি এটি কোনও এফপিজিএতে করে থাকেন তবে আপনি কেবল এটি একটি বড় caseবিবৃতিতে ফেলে দিতে পারেন এবং সংশ্লেষণের সরঞ্জামটি সমস্ত কাজ করতে দিন। একদিকে যেমন একরকম বিতরণের র‍্যামে (রম হিসাবে ব্যবহৃত) একটি বড় চেহারা-সারণী করার মতো; অন্যদিকে আপনার মন্তব্যে যেমন উল্লেখ করেছেন তেমন সরঞ্জামটির অপ্টিমাইজেশনও পাওয়া উচিত।
ফোটন

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
বাহ, কী সফটওয়্যার এটি? এটি ইচ্ছামত বৃহত মাত্রা জন্য কাজ করে? আপনি কীভাবে এই এসওপি ফর্মগুলি থেকে এটি তৈরি করতে সর্বনিম্ন সংখ্যার গেট পাবেন? দেখে মনে হচ্ছে এই মুহুর্তে কোনও সিপিএলডি বা আরও ভাল এটি তৈরির সবচেয়ে কার্যকর উপায়।
ক্যাপচার্যাগ

@ সিএমপি আমার জবাব দেরি করার জন্য দুঃখিত। আমি এখানে উপলব্ধ প্রোগ্রামটি ব্যবহার করেছি: home.roadrunner.com/~ssolver যা সত্যের টেবিলগুলি গ্রহণ করতে পারে - আমি প্রতিটি পূর্ণসংখ্যার বর্গমূলের অঙ্কের জন্য একটি সত্য টেবিল তৈরি করতে একটি সাধারণ পাইথন স্ক্রিপ্ট ব্যবহার করেছি। আসলে বেশি বয়সীদের SOPS হয় আলগোরিদিম প্রোগ্রাম তাদের কমানোর জন্য ব্যবহার করার ক্ষমতা সীমা তাঁদের ন্যূনতম আকারে।
বিট্রেক্স

1
@ সিএমপি আপনি যেমনটি বলেছেন, এইভাবে পূর্ণসংখ্যার স্কোয়ার রুটটি প্রয়োগ করা পাগল হবে, যেহেতু কেউ একটি লিংক টেবিল ব্যবহার করতে পারে বা পূর্ণসংখ্যার বর্গমূলের জন্য কোনও একটি অ্যালগরিদমের কোড আপ করতে পারে এবং আপনার পছন্দের এইচডিএল ভাষাটিকে সংশ্লেষ করতে দেয়।
বিট্রেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.