Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Integer Rawak Teragih Seragam dalam C?
Apabila membangunkan perisian, menjana integer rawak dalam julat yang ditentukan adalah tugas biasa. Walau bagaimanapun, mencari penjana nombor rawak yang cepat dan diedarkan secara seragam boleh menjadi mencabar. Dalam artikel ini, kami menangani isu ini dengan meneroka pelbagai pendekatan untuk menjana integer rawak dalam julat tertentu.
Kaedah biasa untuk menjana integer rawak ialah menggunakan rand() fungsi. Walau bagaimanapun, seperti yang dinyatakan dalam soalan asal, rand() boleh membawa kepada pengedaran berat sebelah, terutamanya untuk julat kecil.
Untuk menangani isu ini, formula alternatif telah dicadangkan:
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
Walaupun formula ini menyediakan pengedaran yang lebih seragam, ia masih gagal untuk menangani semua keperluan, iaitu, kelajuan, pengedaran seragam, julat berubah, dan kebolehbenihan.
Memperkenalkan fungsi perpustakaan standard C std::uniform_int_distribution dan penjana nombor rawak yang berkaitan std::mt19937. Pendekatan ini mudah, pantas dan memberikan hasil yang tidak berat sebelah.
#include <random> std::random_device rd; std::mt19937 rng(rd()); std::uniform_int_distribution<int> uni(min,max); auto random_integer = uni(rng);
std::random_device memulakan penjana dengan sumber entropi sebenar, memastikan nombor yang dijana tidak dapat diramalkan dan rawak. Std::uniform_int_distribution mentakrifkan julat integer yang akan dijana, menjamin bahawa semua nilai dalam julat itu mempunyai kebarangkalian yang sama untuk dipilih.
Pendekatan ini memenuhi semua keperluan:
Kesimpulannya, pendekatan paling mudah dan terbaik untuk menjana integer rawak teragih seragam dalam C ialah menggunakan std::uniform_int_distribution dan std :: fungsi mt19937. Pendekatan ini memanfaatkan algoritma yang dioptimumkan bagi perpustakaan standard, memastikan kedua-dua kelajuan dan rawak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Integer Rawak Teragih Seragam dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!