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
Barbara Streisandasal
2024-12-20 15:43:17223semak imbas

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

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

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!

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