স্পার্কির উত্তর হ'ল এই সমস্যাটি সমাধান করার একটি মানক উপায়, তবে আমি আমার মন্তব্যে যেমন লিখেছি, আপনি ওভারফ্লোসের ঝুঁকি চালান। আরও বিস্তৃত প্রকারটি ব্যবহার করে এটি সমাধান করা যেতে পারে তবে আপনি যদি বিভক্ত করতে চান তবে কী হবে long long
?
নাথন আর্নস্টের উত্তরটি একটি সমাধান সরবরাহ করে তবে এটিতে একটি ফাংশন কল, একটি পরিবর্তনশীল ঘোষণা এবং শর্তসাপেক্ষ জড়িত, এটি এটি ওপিএস কোডের চেয়ে কম নয় এবং সম্ভবত আরও ধীরতর করে তোলে কারণ এটি অপ্টিমাইজ করা শক্ত।
আমার সমাধানটি হ'ল:
q = (x % y) ? x / y + 1 : x / y;
এটি ওপিএস কোডের তুলনায় কিছুটা দ্রুত হবে, কারণ প্রসেসরের উপর একই নির্দেশিকা ব্যবহার করে মডুলো এবং বিভাগ সঞ্চালিত হয়, কারণ সংকলক দেখতে পাবে যে তারা সমান। কমপক্ষে জিসিসি 4.4.1 x86--2 পতাকা সহ এই অপ্টিমাইজেশনটি সম্পাদন করে।
তাত্ত্বিকভাবে সংকলক নাথন আর্নস্টের কোডে ফাংশন কলটিকে ইনলাইন করতে পারে এবং একই জিনিসটি নির্গত করতে পারে, তবে আমি যখন পরীক্ষা করেছিলাম তখন জিসিসি তা করেনি। এটি হতে পারে কারণ এটি সংমিত কোডটি স্ট্যান্ডার্ড লাইব্রেরির একক সংস্করণে টাই করবে।
একটি চূড়ান্ত নোট হিসাবে, আধুনিক মেশিনে এর কোনও কিছুই বিবেচনা করে না, যদি আপনি চূড়ান্তভাবে লুপে থাকেন এবং আপনার সমস্ত ডেটা রেজিস্টারে বা এল 1-ক্যাশে থাকে তবে। অন্যথায় এই সমস্ত সমাধানগুলি সমানভাবে দ্রুত হবে, সম্ভবত নাথন আর্নস্টের ব্যতীত, যদি ফাংশনটি মূল স্মৃতি থেকে আনতে হয় তবে উল্লেখযোগ্যভাবে ধীর হতে পারে।
q = x/y + (x % y != 0);
যথেষ্ট