একদা এক জ্ঞানী ভৃত্য এক রাজপুত্রের প্রাণ বাঁচিয়েছিলেন। রাজা কথা দিলেন, ভৃত্যটি যা কিছু চাইতে পারে তিনি তাই দেবেন। রাজা যে দাবা ভালোবাসেন তা জেনে ভৃত্যটি রাজাকে বললেন, তিনি কিছু গমের দানা চান। দাবাবোর্ডের প্রথম ঘরে এক দানা, আর পরের প্রতিটি ঘরে দানার সংখ্যা দ্বিগুণ হয়ে চলবে।
দাবা বোর্ডে গমের দানার সংখ্যা হিসাব করুন।
দাবা বোর্ডে ৬৪টি ঘর থাকে। ১ নম্বর ঘরে একটি দানা, ২ নম্বর ঘরে দুটি দানা, ৩ নম্বর ঘরে চারটি দানা, এভাবেই প্রতি ঘরে দানার সংখ্যা দ্বিগুণ হতে থাকে।
এমন কোড লিখুন যা হিসাব করে:
PHP ডকুমেন্টেশন অনুযায়ী ইন্টিজারের একটি সর্বোচ্চ মান আছে:
int-এর সাইজ প্ল্যাটফর্ম-নির্ভর, যদিও সাধারণত সর্বোচ্চ মান প্রায় দুই বিলিয়ন হয়ে থাকে (৩২ বিট সাইনড)। 64-বিট প্ল্যাটফর্মে সাধারণত সর্বোচ্চ মান প্রায় 9E18। PHP আনসাইনডintসাপোর্ট করে না।
অন্য কথায়, 2^63 বা তার চেয়ে বড় কোনো সংখ্যা PHP ইন্টিজার হিসেবে প্রকাশ করতে পারে না।
এই অনুশীলনীর কিছু টেস্টে 64 বিট ইন্টিজার (2^64) দরকার, যা PHP-এর ইন্টিজার সাইজের সীমার বাইরে।
সংখ্যা খুব বড় হয়ে গেলে PHP স্বয়ংক্রিয়ভাবে int-কে float-এ রূপান্তর করে দেয়:
কোনো সংখ্যা
intটাইপের সীমার বাইরে চলে গেলে PHP সেটিকে বদলেfloatহিসেবে ব্যাখ্যা করে। আর এমন কোনো অপারেশনের ফলাফল যদিintটাইপের সীমার বাইরে চলে যায়, তবে সেটি বদলেfloatরিটার্ন করে।
কিন্তু float টাইপের নির্ভুলতা সীমিত।
আর King অনির্ভুলতা একেবারেই পছন্দ করেন না।
তাই King ঠিক করলেন, উত্তরটি int বা float-এ প্রকাশ না করে বরং হিসেবের ফলাফল এমন একটি স্ট্রিং হিসেবে চাইবেন, যা ইন্টিজার মান প্রকাশ করে।
আর তিনি চান ইন্টিজার হিসেব, শুধু শেষে একটা অলস রূপান্তর নয়।
ভাষাটি সরাসরি যত বড় সংখ্যা গ্রহণ করে, তার চেয়ে বড় সংখ্যাগুলো এড়িয়ে আপনি কি এটি সমাধান করতে পারবেন?
আর অনুগ্রহ করে gmp বা bc-এর মতো অন্য PHP লাইব্রেরিও ব্যবহার করবেন না।
Exercism-এ সাইন আপ করুন, PHP ট্র্যাকের 11টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।