Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kita Boleh Menjana Integer Rawak Teragih Benar Benar dalam Julat Tertentu?
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!