পাউ () এর বিকল্প নেই কি?


9

আমি আরডুইনো ওয়েব সাইটে ভাষা সংক্রান্ত রেফারেন্সটি পেয়েছি এবং আমি কোনও pow() বড় কিছু মিস করতে পারি তার সমপরিমাণ কোনও ফ্লোট নন এমনটি খুঁজে পাচ্ছি না , তবে আমার জীবনের জন্য আমি স্ট্যাম্পড! আমি pow()ম্যাথ শিরোনামের নীচে FUNCTIONS কলামে পেয়েছি (যেমনটি আমি প্রত্যাশা করব), তবে এটি বলে যে উভয় পরামিতি, [বেস] এবং [এক্সপোনেন্ট] উভয়ই (ভাসমান)। এবং ম্যাথ শিরোনামের অধীনে আরও ছয়টি এন্ট্রি রয়েছে; এগুলির কোনওটিই একটি পূর্ণসংখ্যার সংস্করণ বলে মনে হয় না। আমি যা করতে চাই তা হ'ল 0 থেকে 10 পর্যন্ত এক্সটেন্ডারগুলি ব্যবহার করে 2 এর শক্তি উত্পন্ন করা উচিত 2 2 ^ 0 = 1 এর মতো 2 ^ 1 = 2 তারপরে 2 ^ 2 = 4 তারপর 2 ^ 3 = 8 তারপরে 2 ^ 4 = 16 এরপরে 2 ^ 5 = 32 তারপর 2 ^ 6 = 64 তারপর 2 ^ 7 = 128 তারপর 2 ^ 8 = 256 তারপর 2 ^ 9 = 512 তারপর 2 ^ 10 1024

আমি কি এটি করতে পারি একমাত্র উপায় ভাসা ব্যবহার করে? আমি বাস্তবের সাথে আমার মতবিরোধের মতো অনুভব করতে শুরু করেছিলাম এবং আমার ওষুধটি আসলে গণনা করেছি, তবে আমার ঠিক কোথায় হওয়া উচিত right আমি এই সময়সীমার জন্য আপনার সময় নষ্ট করে দেওয়ার জন্য আগে থেকে ক্ষমা চেয়ে নিই, তবে আমি 9 টি পৃষ্ঠার ট্যাগ দিয়েছি এবং কখনও ভাবতে পারি যে অনুসন্ধান করেছি। আমি স্বীকার করব যে আমি এত বেশি সময় ব্যয় করি নি, তবে আমি নিশ্চিত যে এটি কেবল পাঁচ মিনিটের মতো হয়ে যাবে!


2
পূর্ণসংখ্যার পাও () এর সাধারণ ক্ষেত্রে, স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি ১০০১৪৯৯/২ দেখুন । 2 এর ক্ষমতার জন্য, কেবল শিফট ব্যবহার করুন।
পিটার কর্ডেস

উত্তর:


8

সাধারণ ক্ষেত্রে, @ দ্যাট_হ'এর উত্তরটি সঠিক, তবে আপনি লক্ষণীয় যে আপনি একটি বিশেষ ক্ষেত্রে চান ... দু'জনের ক্ষমতা powers যেহেতু কম্পিউটারগুলি বাইনারি গাণিতিক ব্যবহার করে, দু'জনের ক্ষমতার সাথে জড়িত ক্রিয়াকলাপগুলিতে প্রায়শই কিছু শর্টকাট পাওয়া যায়।

দুটির শক্তির দ্বারা সংখ্যাকে গুণিত করা বাম শিফট অপারেশন ( <<) দ্বারা সম্পন্ন করা যায় , যা আক্ষরিক অর্থে সংখ্যাটির বাইনারি উপস্থাপনার অঙ্কগুলি (অর্থাৎ বিট) বাম দিকে স্থানান্তরিত করে । দুইটি বেসে, বিটগুলি এক জায়গায় বামে স্থানান্তর করা 2 দ্বারা গুণিত হওয়ার সমান, যেমন বেস 10 তে শিখর অঙ্কগুলি বামে এক স্থান 10 হিসাবে গুণ করা সমান হয় 10+ বাম শিফট অপারেটরের সম্পূর্ণ ব্যাখ্যার জন্য , স্ট্যাক ওভারফ্লোতে এই উত্তরটি দেখুন ।

এটি লক্ষ করা গুরুত্বপূর্ণ যে বাম স্থানান্তর তথ্য হারাতে পারে; বিট শেষ স্থানান্তরিত হারিয়ে গেছে। আপনার 10 থেকে 2 অবধি ক্ষমতা প্রয়োজন বলে স্বাক্ষরিত পূর্ণসংখ্যার সাথে কাজ করার সময় আপনি নিরাপদ হন, যার আর্দুইনো ইউনোতে সর্বাধিক মূল্য থাকে2^15-1

এই সাবধানবাণীগুলি দেওয়া, এই সীমাবদ্ধতার মধ্যে দুটির শক্তি গণনা করার জন্য এখানে একটি ফাংশন's এটি খুব দ্রুত কোড কারণ বাম শিফট অপারেশন একটি খুব নিম্ন স্তরের অপারেশন, এবং কোনও গুণটি আসলে সঞ্চালিত হয় না।

int pow2(int p){
    return 1 << p;
}

ত্রুটি: আপনি যদি এটি ব্যবহার করেন তবে এটি 2 ^ 32 - 1 পর্যন্ত যেতে পারে unsigned long
ডেটা হা

@ ডাঃহ্যা ধন্যবাদ, আমি সম্পাদনার সময় "স্বাক্ষরিত" শব্দটি হারিয়েছি বলে মনে হয়েছে। সংশোধন করা হয়েছে।
জেসন ক্লার্ক

1
আপনি যদি স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যার পাটিগণিতের একটি প্রয়োগ ব্যবহার করেন
ডেটা হ্যান ব্যাগ

আমি বিশেষত জানতে চাই যে পাও () এর ফলাফলগুলিতে একটি পূর্ণসংখ্যার রূপান্তরকরণের ফলাফলগুলি 2 এর ক্ষমতার জন্য কাজ করে না কেন আমার জন্য, পাও (2,3) 8.00 ফেরত দেয় তবে পূর্ববর্তী সময়ে (8.00) 8 ফেরত দেয় , ইনট (পাও (2,3)) ফেরত 7!
কেডিএম

1

এটা দিয়ে কাজ করে int, double, longএবং floatunsigned longএবং unsigned intকাজ করা উচিত। আপনার কেবলমাত্র ফ্লোট ব্যবহার করার প্রয়োজন নেই।

আশা করি এটি সাহায্য করেছে!


উপরের উত্তরটির উত্তরটি যে কারণে কাজ করে তা হ'ল আসল সংখ্যাগুলির সেট (যাতে ভাসমান রয়েছে) সংখ্যার সেট থাকে
ডেটা হান ব্যাগ

@ ডাটহানবাগ: এবং আরও গুরুত্বপূর্ণ বিষয় হল, প্রতিটি 32-বিট পূর্ণসংখ্যা হ'ল একটি দ্বারা ঠিক উপস্থাপনযোগ্য double। আসলে, যেহেতু আইইইই ভাসমান পয়েন্টটি বাইনারি ম্যান্টিসা / এক্সপোনেন্ট উপস্থাপনার উপর ভিত্তি করে, 2 এর প্রতিটি শক্তি 2 ^ 53 এর বাইরেও যথাযথভাবে উপস্থাপনযোগ্য হওয়া উচিত (এমন বিন্দু যেখানে doubleপ্রতিটি স্বেচ্ছাচারিত পূর্ণসংখ্যাকে প্রতিনিধিত্ব করতে পারে না, সর্বশেষ স্থানে একটি 1 ইউনিট ম্যান্টিসা ১.০ এর বেশি)।
পিটার কর্ডেস

@ পিটারকর্ডস হ্যাঁ আমি এটি জানতাম। এর উত্তর সম্পর্কে আমার মন্তব্যে আরডুইনোর জন্য ভাসা এবং পূর্ণসংখ্যা সেটগুলি উল্লেখ করার সময় আমার "বাউন্ডেড সেট" বলা উচিত ছিল
ডেটা হান ব্যাগ

4
এটি pow()পূর্ণসংখ্যার জন্য ব্যবহারের সাধারণ প্রশ্নের কিছুটা বৈধ উত্তর , তবে এএএএএফসিটি আরডুইনোর কাছে হার্ডওয়্যার ভাসমান বিন্দুও নেই, সুতরাং এটি একটি ভয়ানক উত্তর। এর মতো একটি পূর্ণসংখ্যার pow()বাস্তবায়ন যা লগ 2 (এন) সময়গুলিতে গুণমান এবং ফলাফল জোগাতে যোগ করে প্রায় সম্ভবত আরও ভাল সম্পাদন করে, এবং বিট শিফট 2 এর ক্ষমতার জন্য কাজ করার কথা উল্লেখ করতে ব্যর্থ হওয়ায় এটি এই প্রশ্নের ভয়ানক উত্তর দেয়।
পিটার কর্ডেস

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