আপনার কাছে ইতিমধ্যে স্মার্ট উত্তর রয়েছে: স্বাক্ষরবিহীন পাটিগণিতটি মডুলো পাটিগণিত এবং ফলস্বরূপ ফলাফলটি অনুষ্ঠিত হবে, আপনি এটি গাণিতিকভাবে প্রমাণ করতে পারবেন ...
কম্পিউটারগুলির সম্পর্কে একটি দুর্দান্ত জিনিস হ'ল কম্পিউটারগুলি দ্রুত। প্রকৃতপক্ষে, তারা এত দ্রুত যে 32 বিটের সমস্ত বৈধ সংমিশ্রণগুলি গণন করা যুক্তিসঙ্গত সময়ে সম্ভব (64৪ বিট দিয়ে চেষ্টা করবেন না)।
সুতরাং, আপনার ক্ষেত্রে, আমি ব্যক্তিগতভাবে এটি কেবল একটি কম্পিউটারে ফেলে দিতে পছন্দ করি; এটা আমার নিজেকে সন্তুষ্ট করার যে প্রোগ্রাম সঠিক চেয়ে নিজেকে সন্তুষ্ট করার চেয়ে গাণিতিক প্রমাণ সঠিক লাগে কম সময় লাগে এবং আমি নির্দেশের মধ্যে বিস্তারিত তত্ত্বাবধান না যে 1 :
#include <iostream>
#include <limits>
int main() {
std::uint64_t const MAX = std::uint64_t(1) << 32;
for (std::uint64_t i = 0; i < MAX; ++i) {
for (std::uint64_t j = 0; j < MAX; ++j) {
std::uint32_t const a = static_cast<std::uint32_t>(i);
std::uint32_t const b = static_cast<std::uint32_t>(j);
auto const champion = (a + (b & 255)) & 255;
auto const challenger = (a + b) & 255;
if (champion == challenger) { continue; }
std::cout << "a: " << a << ", b: " << b << ", champion: " << champion << ", challenger: " << challenger << "\n";
return 1;
}
}
std::cout << "Equality holds\n";
return 0;
}
এটি 32-বিট স্পেসের সমস্ত সম্ভাব্য মানগুলির মধ্যে দিয়ে গণনা করে a
এবং b
সমতা রাখে কি না তা পরীক্ষা করে। যদি এটি না হয় তবে এটি কেসটি প্রিন্ট করে যা কার্যকর হয়নি, যা আপনি স্যানিটি পরীক্ষা হিসাবে ব্যবহার করতে পারেন।
এবং, কলঙ্ক অনুসারে : সাম্যতা ধারণ করে ।
তদুপরি, পাটিগণিত নিয়মগুলি বিট-প্রস্থের অজোনস্টিক ( int
বিট-প্রস্থের উপরে ) রয়েছে, এই সমতাটি uns৪ বিট এবং ১২৮ বিট সহ 32 বিট বা তার বেশি সংখ্যক স্বাক্ষরযুক্ত পূর্ণসংখ্যার জন্য থাকবে।
দ্রষ্টব্য: একটি সংকলক কীভাবে যুক্তিসঙ্গত সময় ফ্রেমে সমস্ত -৪-বিট নিদর্শনগুলি গণনা করতে পারে? এটা হতে পারে না. লুপগুলি অপ্টিমাইজ করা হয়েছিল। অন্যথায় আমরা সকলেই মৃত্যুদণ্ড কার্যকর হওয়ার আগেই মারা যেতাম।
আমি প্রাথমিকভাবে এটি 16-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যার জন্যই প্রমাণ করেছি; দুর্ভাগ্যক্রমে সি ++ একটি উন্মাদ ভাষা যেখানে ছোট পূর্ণসংখ্যার (এর চেয়ে ছোট বিটউইদথ int
) প্রথমে রূপান্তরিত হয় int
।
#include <iostream>
int main() {
unsigned const MAX = 65536;
for (unsigned i = 0; i < MAX; ++i) {
for (unsigned j = 0; j < MAX; ++j) {
std::uint16_t const a = static_cast<std::uint16_t>(i);
std::uint16_t const b = static_cast<std::uint16_t>(j);
auto const champion = (a + (b & 255)) & 255;
auto const challenger = (a + b) & 255;
if (champion == challenger) { continue; }
std::cout << "a: " << a << ", b: " << b << ", champion: "
<< champion << ", challenger: " << challenger << "\n";
return 1;
}
}
std::cout << "Equality holds\n";
return 0;
}
এবং আবারও, কলঙ্ক অনুসারে : সাম্যতা ধারণ করে ।
ঠিক আছে, আপনি সেখানে যান :)
1 অবশ্যই, যদি কোনও প্রোগ্রাম অজান্তেই অনির্ধারিত আচরণকে ট্রিগার করে, তবে এটি খুব বেশি প্রমাণিত হবে না।
Math.random()
একটি পূর্ণসংখ্যা অথবা একটি ডবল এ [0,1) আসতে? আমি মনে করি না যে আপনার লিপিটি (আমি বলতে পারি সেরা) আপনি যে সমস্যার সমাধান করেছেন তা প্রতিফলিত করে।