Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kita Boleh Menjana Integer Rawak Teragih Benar Benar dalam Julat Tertentu?

Bagaimanakah Kita Boleh Menjana Integer Rawak Teragih Benar Benar dalam Julat Tertentu?

Barbara Streisand
Lepaskan: 2024-12-20 15:43:17
asal
186 orang telah melayarinya

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

Menjana Integer Rawak Teragih Seragam

Dalam banyak aplikasi pengaturcaraan, menjana integer rawak dalam julat yang ditentukan adalah keperluan biasa. Walau bagaimanapun, memastikan bahawa integer ini diedarkan secara seragam memberikan cabaran. Artikel ini meneroka pelbagai pendekatan untuk mencapai pengedaran seragam.

Kod dan Had Sedia Ada

Kod yang disediakan oleh pengguna memanfaatkan fungsi rand() untuk menjana nombor rawak dalam julat yang diberikan. Walau bagaimanapun, pendekatan ini mengalami kekurangan keseragaman, terutamanya untuk julat kecil seperti <0, 1>. Ini dikaitkan dengan kebarangkalian rendah rand() mengembalikan RAND_MAX, nilai maksimum.

Formula Cadangan

Untuk menangani isu ini, pengguna telah mencipta formula baharu:

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
Salin selepas log masuk

Walaupun formula ini bertujuan untuk meningkatkan keseragaman, ia masih gagal, seperti yang dibuktikan oleh pensampelan data.

C Standard Library Solution

C standard library menyediakan penyelesaian yang elegan dan boleh dipercayai untuk masalah ini. Pengepala std::random termasuk set penjana dan pengedaran nombor rawak yang boleh menjana nombor rawak dengan pengedaran seragam.

#include <random>

// Initialize random-number engine with a seed
std::random_device rd;
std::mt19937 rng(rd());

// Define uniform integer distribution
std::uniform_int_distribution<int> uni(min, max);

// Generate random integer within range
auto random_integer = uni(rng);
Salin selepas log masuk

Pendekatan ini memanfaatkan kod yang diuji dan dioptimumkan dengan baik, memastikan pengedaran seragam dan kecekapan. Ia menghapuskan keperluan untuk mencipta semula roda dan kebimbangan tentang berat sebelah atau nilai benih.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menjana Integer Rawak Teragih Benar Benar dalam Julat Tertentu?. 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