Penjanaan nombor rawak adalah bahagian penting dalam pengaturcaraan komputer. Dalam pengaturcaraan C++, nombor rawak juga sangat biasa dan boleh digunakan untuk mensimulasikan data, menjana data ujian, pembangunan permainan, dll. Artikel ini akan memperkenalkan beberapa kaedah penjanaan nombor rawak dalam bahasa C++.
Algoritma penjanaan nombor pseudo-rawak ialah kaedah penjanaan nombor rawak yang digunakan dalam kebanyakan atur cara Ia bukan nombor rawak yang benar, tetapi nombor rawak pseudo yang dijana melalui algoritma matematik tertentu. Dalam C++, anda boleh menggunakan fungsi rand untuk menjana nombor pseudo-rawak. Fungsi
rand ditakrifkan dalam fail pengepala stdlib.h. Ia mengembalikan nombor rawak jenis int, antara 0 hingga RAND_MAX RAND_MAX ditakrifkan dalam fail pengepala stdlib.h, dan nilainya biasanya 32767.
Kod sampel:
#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main() { // 设置随机数种子 srand(time(0)); // 生成10个随机数 for(int i = 0; i < 10; i++) { cout << rand() << endl; } return 0; }
Dalam kod di atas, fungsi srand digunakan untuk menetapkan benih nombor rawak, dan masa(0) boleh mendapatkan bilangan saat masa semasa, supaya keputusan menjalankan program adalah berbeza setiap kali. Kemudian gunakan gelung for untuk menjana 10 nombor rawak dan mengeluarkannya ke skrin.
Perlu diingatkan bahawa setiap kali fungsi rand dipanggil, ia akan mengembalikan nombor rawak yang unik, tetapi jika ia dipanggil beberapa kali, akan ada tahap korelasi tertentu antara nombor rawak. Oleh itu, apabila menggunakan fungsi rand untuk menghasilkan sejumlah besar nombor rawak, kaedah lain perlu digunakan untuk mengelirukan.
Nombor rawak sebenar merujuk kepada nombor rawak yang dijana melalui fenomena fizikal Contohnya, data gelombang seismik atau ciri fotoelektrik boleh dikumpul melalui peranti perkakasan ini sangat mahal dan tidak sesuai untuk kebanyakan Untuk program, ia adalah memadai untuk menggunakan algoritma penjanaan nombor rawak.
Walau bagaimanapun, terdapat beberapa senario aplikasi yang memerlukan nombor rawak keselamatan tinggi Untuk melindungi keselamatan dan kerahsiaan data, nombor rawak benar perlu digunakan. Dalam kes ini, peranti luaran boleh digunakan untuk memberikan nombor rawak yang benar. Sebagai contoh, nombor rawak benar boleh dijana dengan membaling dadu, melambung syiling, melukis lot, dsb., tetapi kaedah ini bukan sahaja tidak cekap, tetapi juga menjana jenis nombor rawak yang terhad.
Kaedah yang lebih biasa ialah menjana nombor yang benar-benar rawak melalui peranti fizikal yang dipanggil penjana nombor rawak (RNG). Ia menjana nombor rawak dengan mengumpul proses fizikal atau prosedur matematik yang tidak dapat diramalkan, di samping menyediakan beberapa ciri keselamatan tambahan. Walau bagaimanapun, kos menggunakan penjana nombor rawak sebenar adalah jauh lebih tinggi daripada menggunakan algoritma penjanaan nombor rawak pseudo.
C++ 11 menyediakan perpustakaan nombor rawak baharu, termasuk dua bahagian: Pertama, penjana nombor pseudo-rawak, termasuk berbilang algoritma yang boleh memenuhi keperluan pelbagai senario aplikasi dengan lebih baik, Kedua ialah penjana nombor rawak benar, yang boleh mengakses kemudahan perkakasan yang dijana khas sistem dan mengembalikan nombor rawak benar.
Pustaka penjanaan nombor rawak dalam C++ 11 termasuk:
Menggunakan nombor rawak dalam C++ 11 Semasa menjana perpustakaan, anda perlu memasukkan fail pengepala secara rawak, dan anda boleh menggunakan fungsi uniform_int_distribution dan uniform_real_distribution untuk mengawal julat dan jenis nombor rawak.
Kod sampel:
#include <iostream> #include <random> using namespace std; int main() { // 以当前时间作为种子 default_random_engine engine(time(nullptr)); // uniform_int_distribution:以等概率生成min到max范围内的整数 uniform_int_distribution<int> distribution(0, 100); cout << distribution(engine) << endl; // uniform_real_distribution:以等概率生成min到max范围内的浮点数 uniform_real_distribution<double> r_distribution(0, 100); cout << r_distribution(engine) << endl; return 0; }
Dalam kod di atas, default_random_engine digunakan untuk menjana benih nombor rawak, dan julat nombor rawak integer dan titik terapung yang dijana masing-masing dinyatakan dalam uniform_int_distribution dan uniform_real_distribution. Akhirnya, nombor rawak dijana dengan memanggil fungsi enjin.
Di atas adalah beberapa kaedah penjanaan nombor rawak biasa dalam C++ Senario aplikasi yang berbeza memerlukan kaedah penjanaan nombor rawak yang berbeza, dan anda perlu memilih kaedah yang sesuai mengikut situasi sebenar. Dalam pengaturcaraan sebenar, anda boleh menggabungkan kelebihan nombor pseudo-rawak dan nombor rawak benar dan menggunakan beberapa kaedah penjanaan nombor rawak lanjutan untuk meningkatkan kecekapan dan keselamatan program.
Atas ialah kandungan terperinci Penjanaan nombor rawak dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!