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
Lepaskan: 2024-12-24 11:06:18
asal
273 orang telah melayarinya

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan