Mesin Acak
Hasilkan bit acak
Mesin Acak adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Mengapa <random>?
rand() lama memiliki kualitas rendah dan sulit dikendalikan. Pustaka <random> memisahkan keacakan menjadi mesin (sumber bit acak) dan distribusi (bentuk keluaran).
#include <iostream>
#include <random>
int main() {
std::mt19937 engine(42);
std::cout << "engine produced a value\n";
unsigned int v = engine();
std::cout << (v != 0 ? "non-zero" : "zero") << '\n';
return 0;
}Mersenne Twister
std::mt19937 adalah mesin yang paling umum: cepat, berkualitas tinggi, dan memiliki periode yang panjang. Angka tersebut menunjukkan ukuran statusnya dalam bit.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(1);
unsigned int a = gen();
unsigned int b = gen();
std::cout << (a != b ? "two different values" : "same") << '\n';
return 0;
}Mesin Bersifat Deterministik
Dengan nilai awal yang sama, mesin selalu menghasilkan urutan yang sama. Inilah yang membuat hasil dapat direproduksi.
#include <iostream>
#include <random>
int main() {
std::mt19937 a(123), b(123);
std::cout << std::boolalpha << (a() == b()) << '\n';
std::cout << (a() == b()) << '\n';
return 0;
}Memanggil Mesin
Mesin dapat dipanggil. Setiap pemanggilan engine() mengembalikan bilangan bulat acak mentah berikutnya dalam rentangnya.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(7);
for (int i = 0; i < 3; ++i) {
unsigned int v = gen();
std::cout << (v % 100) << ' ';
}
std::cout << '\n';
return 0;
}Rentang Mesin
min() dan max() melaporkan rentang nilai mentah yang dapat dikeluarkan mesin.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen;
std::cout << "min: " << gen.min() << '\n';
std::cout << "max: " << gen.max() << '\n';
return 0;
}Mesin Lainnya
Pustaka ini menyediakan beberapa mesin:
minstd_rand: generator kongruensial linear berukuran kecil.mt19937: mesin bawaan untuk penggunaan umum.ranlux48: kualitas lebih tinggi, tetapi lebih lambat.
#include <iostream>
#include <random>
int main() {
std::minstd_rand lcg(5);
std::mt19937 mt(5);
std::cout << (lcg() % 10) << ' ' << (mt() % 10) << '\n';
return 0;
}Mesin 64-bit
Gunakan std::mt19937_64 saat Anda memerlukan nilai acak 64-bit, misalnya untuk hash besar atau rentang yang sangat luas.
#include <iostream>
#include <random>
int main() {
std::mt19937_64 gen(99);
unsigned long long v = gen();
std::cout << "got a 64-bit value: " << (v != 0 ? "yes" : "no") << '\n';
return 0;
}Mesin vs Distribusi
Keluaran mentah mesin terdistribusi secara seragam dalam rentang yang sangat besar. Untuk mendapatkan nilai yang berguna seperti hasil lemparan dadu, masukkan mesin ke dalam sebuah distribusi.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2024);
std::uniform_int_distribution<int> die(1, 6);
std::cout << "rolled " << die(gen) << '\n';
return 0;
}Membuang Nilai
discard(n) memajukan mesin sebanyak n langkah tanpa menghasilkan keluaran, sehingga berguna untuk melompati bagian tertentu dalam suatu urutan.
#include <iostream>
#include <random>
int main() {
std::mt19937 a(10), b(10);
b.discard(2);
a(); a();
std::cout << std::boolalpha << (a() == b()) << '\n';
return 0;
}Menggunakan Kembali Satu Mesin
Buat satu mesin dan gunakan kembali untuk semua keacakan dalam program Anda. Membuat mesin baru setiap kali tidak efisien dan dapat mengurangi kualitasnya.
#include <iostream>
#include <random>
int main() {
std::mt19937 gen(2026);
std::uniform_int_distribution<int> d10(1, 10);
int total = 0;
for (int i = 0; i < 5; ++i) total += d10(gen);
std::cout << "sum of 5 rolls: " << total << '\n';
return 0;
}Jebakan Nilai Awal Bawaan
Mesin yang dibuat dengan konstruktor bawaan menggunakan nilai awal bawaan yang tetap, sehingga menghasilkan urutan yang sama pada setiap proses berjalan. Anda harus memberikan nilai awal agar mendapatkan variasi yang sebenarnya (akan dibahas dalam pelajaran berikutnya).
#include <iostream>
#include <random>
int main() {
std::mt19937 gen; // default seed: same every run
std::cout << "first value mod 1000: " << (gen() % 1000) << '\n';
return 0;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang mesin acak.
Ringkasan
Anda telah mempelajari mesin acak:
<random>memisahkan mesin (bit) dari distribusi (bentuk)std::mt19937adalah mesin pilihan utama; mesin ini bersifat deterministik untuk nilai awal tertentu- gunakan kembali satu mesin dan berikan nilai awal yang tepat untuk mendapatkan variasi yang sebenarnya
Berikutnya, Anda akan membentuk keluaran mesin menggunakan distribusi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mesin Acak” gratis?
Ya — teks lengkap “Mesin Acak” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mesin Acak”?
Hasilkan bit acak Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mesin Acak” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.