Generator Angka Acak C++
Pelajari cara menghasilkan angka acak dalam C++ dengan contoh kode interaktif. Jelajahi rand(), srand(), <random> library, std::uniform_int_distribution, dan std::mt19937 dengan penjelasan terperinci.
Butuh Nomor Acak Cepat?
Coba generator angka acak online kami untuk hasil instan tanpa menulis kode apa pun.
Editor Kode C++
Pelajari cara menghasilkan angka acak dalam C++ dengan contoh kode interaktif. Jelajahi rand(), srand(), <random> library, std::uniform_int_distribution, dan std::mt19937 dengan penjelasan terperinci.
Keluaran
Output Simulasi (C++ berjalan di server)
Klik "Jalankan Kode" untuk melihat contoh output
C++ klasik dengan rand()
Gunakan fungsi rand() tradisional <cstdlib> dari untuk menghasilkan bilangan bulat acak. Sederhana dan didukung secara luas, meskipun tidak cocok untuk aplikasi kriptografi karena kualitas keacakan yang buruk.
Memahami Pembuatan Angka Acak C++
C++ menyediakan beberapa cara untuk menghasilkan angka acak, berkembang dari fungsi rand() sederhana di C ke <random> perpustakaan modern di C++11. Rand () klasik menggunakan Linear Congruential Generator (LCG) dan ditanami dengan srand(), sedangkan pendekatan modern menggunakan algoritma Mersenne Twister dan menyediakan berbagai kelas distribusi untuk kasus penggunaan yang berbeda.
rand() Function
Fungsi rand() klasik dari <cstdlib> menyediakan pembuatan angka pseudo-acak sederhana. Ditanam dengan srand(), menggunakan algoritma Linear Congruential Generator (LCG). Cocok untuk aplikasi dasar tetapi tidak untuk tujuan kriptografi.
<random> Library
<random> Perpustakaan (C++11+) menyediakan pembuatan angka acak modern dengan std::mt19937 (Mersenne Twister), berbagai distribusi seperti uniform_int_distribution, dan kualitas keacakan yang lebih baik daripada rand().
uniform_int_distribution
std::uniform_int_distribution memberikan kontrol presisi atas rentang integer dengan distribusi seragam. Sempurna untuk aplikasi statistik, simulasi, dan ketika kontrol rentang tepat diperlukan.
std::mt19937
std::mt19937 mengimplementasikan algoritma Mersenne Twister, menyediakan properti statistik yang sangat baik dan periode yang sangat panjang (2^19937-1). Ini adalah mesin default untuk sebagian besar distribusi <random>.
Kasus Penggunaan Umum
Game & Simulasi
Hasilkan lemparan dadu acak, undian kartu, pembuatan prosedural, dan acara permainan menggunakan rand() atau <random> perpustakaan modern dalam loop dan simulasi game.
Keamanan & Kriptografi
Untuk aplikasi keamanan, pertimbangkan untuk menggunakan pustaka kriptografi khusus. Rand() standar tidak aman secara kriptografis. Gunakan generator angka acak aman khusus platform untuk kata sandi dan token.
Komputasi Performa Tinggi
<random> Perpustakaan modern dengan std::mt19937 memberikan kinerja yang sangat baik untuk menghasilkan bilangan acak dalam jumlah besar dalam HPC dan aplikasi komputasi ilmiah.
Pengujian Perangkat Lunak
Buat data pengujian acak, input pengujian fuzz, dan kasus tepi untuk memastikan cakupan kode yang kuat dan deteksi bug dalam aplikasi C++.
Cara Kerja Pembuatan Angka Acak C++
Fungsi klasik rand() (dari srand().
Perpustakaan modern (C++11+) menggunakan algoritma Mersenne Twister (std::mt19937), yang memberikan kualitas keacakan dan sifat statistik yang jauh lebih baik. Ini juga menawarkan berbagai kelas distribusi seperti uniform_int_distribution, normal_distribution, dan bernoulli_distribution untuk kasus penggunaan yang berbeda.
std::random_device menyediakan sumber entropi khusus platform untuk menyemai mesin angka acak, memastikan urutan yang berbeda setiap kali program berjalan.
Tips Ahli untuk Generasi Acak C++
Hindari rand() untuk Kode Baru
Untuk kode C++ baru (C++11 dan yang lebih baru), lebih suka
Selalu Benih srand()
Jika menggunakan rand(), selalu panggil srand(std::time(0)) pada program mulai untuk menyemai generator. Jika tidak, Anda akan mendapatkan urutan yang sama setiap saat. Dengan
Gunakan Distribusi yang Sesuai
Untuk rentang bilangan bulat seragam, gunakan std::uniform_int_distribution. Untuk angka floating-point, gunakan std::uniform_real_distribution. Ini memastikan sifat statistik yang tepat.
Spesifikasi teknis
Algoritma
- Generator Kongruensial Linier (fungsi rand)
- Mersenne Twister (std::mt19937)
- Karakteristik Kinerja
rand(): Kualitas keacakan yang cepat tetapi buruk
- <random>: Cepat dengan kualitas yang sangat baik
- Rentang tidak valid: minimum harus kurang dari maksimum
- std::mt19937: Very fast for large quantities