Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menjana nombor rawak yang benar-benar seragam dalam julat tertentu dalam C?

Bagaimanakah saya boleh menjana nombor rawak yang benar-benar seragam dalam julat tertentu dalam C?

Barbara Streisand
Barbara Streisandasal
2024-12-25 15:58:10160semak imbas

How can I generate truly uniform random numbers within a specific range in C  ?

Jana Nombor Rawak Secara Seragam Pada Keseluruhan Julat

Untuk menjana nombor rawak dalam selang waktu tertentu [min, maks ] secara seragam, garis panduan berikut sepatutnya dipertimbangkan:

Elakkan Menggunakan rand() dan Operator Modulo

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.

C 11 Taburan Integer Seragam

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';
}

Penjana Nombor Rawak Lain

C 11 menyediakan penjana nombor rawak tambahan dengan pelbagai taburan, seperti sebagai Bernoulli, Poisson, dan biasa.

Mengocok Bekas

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';});
}

Boost.Random

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn