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.

Beberapa Metode Praktik Terbaik Salinan Instan

Butuh Nomor Acak Cepat?

Coba generator angka acak online kami untuk hasil instan tanpa menulis kode apa pun.

Buka Generator Angka Acak

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 ) menggunakan algoritma Linear Congruential Generator (LCG). Ini menghasilkan bilangan pseudo-acak menggunakan rumus: berikutnya = (a * arus + c) % m. Urutannya bersifat deterministik dan harus dibenihkan dengan 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 pustaka daripada rand()/srand(). Ini memberikan keacakan yang lebih baik, lebih banyak fleksibilitas, dan operasi yang aman untuk utas.

🔒

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 , penyemaian ditangani secara otomatis.

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