Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menjana nombor rawak yang benar-benar seragam dalam julat tertentu dalam C?
Untuk menjana nombor rawak dalam selang waktu tertentu [min, maks ] secara seragam, garis panduan berikut sepatutnya dipertimbangkan:
Menggunakan rand() dan operator modulo, seperti yang ditunjukkan dalam coretan kod yang diberikan, mungkin tidak menghasilkan nombor rawak teragih seragam. Ia bergantung pada julat dan nilai RAND_MAX.
Dengan C 11, anda boleh menggunakan std::uniform_int_distribution untuk menjana nombor rawak dalam a julat:
#include <iostream> #include <random> int main() { const int range_from = 0; const int range_to = 1000; std::random_device rand_dev; std::mt19937 generator(rand_dev()); std::uniform_int_distribution<int> distr(range_from, range_to); std::cout << distr(generator) << '\n'; }
C 11 menyediakan penjana nombor rawak tambahan dengan pelbagai taburan, seperti sebagai Bernoulli, Poisson, dan biasa.
Untuk mengocok bekas secara rawak, gunakan std::shuffle:
#include <iostream> #include <random> #include <vector> int main() { std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator); std::for_each(vec.begin(), vec.end(), [](auto i){std::cout << i << '\n';}); }
Jika C 11 tidak tersedia, anda boleh menggunakan Boost.Random, yang menawarkan antara muka yang serupa dengan penjanaan nombor rawak C 11 kemudahan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menjana nombor rawak yang benar-benar seragam dalam julat tertentu dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!