Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menjana Integer Rawak Benar-Benar Tidak Berat sebelah dalam C?

Bagaimanakah Saya Boleh Menjana Integer Rawak Benar-Benar Tidak Berat sebelah dalam C?

Susan Sarandon
Lepaskan: 2024-12-25 15:01:09
asal
185 orang telah melayarinya

How Can I Generate Truly Unbiased Random Integers in C  ?

Penjanaan Integer Rawak Tidak Bincang dengan std::random_device

Dalam usaha menjana integer rawak teragih seragam, kebimbangan awal berpunca daripada kelemahan menggunakan rand(). Untuk menangani isu ini, perpustakaan standard C menyediakan penyelesaian yang lebih teguh dan cekap.

Asas penjanaan nombor rawak terletak pada penggunaan enjin nombor rawak yang disemai dengan sumber luaran. Dalam kes ini, std::random_device berfungsi sebagai mekanisme pembenihan, memberikan nilai awal bukan penentu yang akan digunakan untuk menjana nombor rawak seterusnya.

Pilihan pilihan untuk enjin nombor rawak ialah std::mt19937 , menggunakan algoritma Mersenne-Twister. Enjin ini mempamerkan sifat statistik yang sangat baik dan telah terbukti berprestasi tinggi.

Untuk menjana integer rawak tidak berat sebelah dalam julat yang ditentukan, kami menggunakan std::uniform_int_distribution. Taburan ini memastikan bahawa semua nilai dalam julat mempunyai kebarangkalian yang sama untuk dipilih.

Kod di bawah merangkumi konsep ini:

#include <random>

std::random_device rd;
std::mt19937 rng(rd());
std::uniform_int_distribution<int> uni(min, max);

auto random_integer = uni(rng);
Salin selepas log masuk

Dengan menggunakan pendekatan ini, pembangun boleh mempercayai keseragaman daripada integer yang dijana secara rawak, menghapuskan sebarang kecenderungan yang berpotensi dan memastikan hasil yang boleh dipercayai dan boleh diramal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Integer Rawak Benar-Benar Tidak Berat sebelah dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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