Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Nombor Rawak Teragih Seragam Dalam Julat Tertentu dalam C ?

Bagaimanakah Saya Boleh Menjana Nombor Rawak Teragih Seragam Dalam Julat Tertentu dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-24 11:06:18178semak imbas

How Can I Generate Uniformly Distributed Random Numbers Within a Specific Range in C  ?

Penjanaan Nombor Rawak Seragam Merentasi Julat

Anda mencari kaedah untuk menjana nombor rawak secara seragam dalam julat [min, maks].

Kecacatan dengan rand

Pelaksanaan semasa anda menggunakan rand() dan modulus pengendali mungkin tidak memastikan pengedaran seragam, kerana kelakuannya bergantung pada RAND_MAX dan julat itu sendiri.

C 11 dan Penjanaan Julat Seragam

Dalam C 11, std::uniform_int_distribution menawarkan penyelesaian yang disesuaikan dengan keperluan ini:

#include <random>

std::uniform_int_distribution<int> distr(min, max);
std::random_device rand_dev;
std::mt19937 generator(rand_dev());

int random_number = distr(generator);

Tambahan Ciri-ciri

Yang pengepala menyediakan pelbagai besar penjana nombor rawak dengan taburan yang berbeza-beza, seperti Bernoulli, Poisson dan normal.

Pengocokan Bekas

Untuk mengocok bekas, gunakan std::shuffle:

#include <random>
#include <vector>

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

Boost.Random

Jika menggunakan pengkompil C 11 tidak boleh dilaksanakan, pertimbangkan Boost.Random, yang menampilkan antara muka yang serupa dengan rakan sejawat C 11.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak Teragih 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