Skip to main content
🟢 Beginner

Penjana Nombor Rawak

Jana nombor rawak dalam julat. Sempurna untuk permainan, keputusan, dan statistik. Cuba kalkulator matematik dalam talian percuma ini untuk keputusan tepat dan segera.

<bahagian kandungan

Apakah Generator Bilangan Acak?

Generator bilangan acak (RNG) adalah alat atau algoritma yang menghasilkan bilangan tanpa pola yang dapat dilihat — setiap output statistiknya berdiri sendiri dari output sebelumnya, dengan setiap nilai dalam rentang sama kemungkinan muncul. Bilangan acak adalah asas kepada statistik, permainan, kriptografi, simulasi saintifik, dan pengaturcaraan komputer.

Keacakan yang sebenar datang dari fenomena fizikal yang tidak dapat diprediksi: pelepasan radioaktif, bising atmosfer, bising termal dalam rangkaian elektronik, atau kejadian terowong kuantum. RNG fizikal mengukur fenomena-fenomena ini untuk menghasilkan aliran bit yang sebenar acak. Perkhidmatan seperti random.org mengumpulkan bising atmosfer dari penerima radio untuk menyediakan bilangan acak yang sebenar.

Bilangan acak yang dihasilkan oleh komputer adalah secara teknikal pseudorandom — mereka adalah rentetan yang terdeterministik yang kelihatan acak tetapi sepenuhnya ditentukan oleh nilai awal yang dipanggil biji. Dengan biji yang sama, generator bilangan acak pseudorandom (PRNG) menghasilkan rentetan yang sama. Ini sebenarnya berguna untuk ketepatan semula dalam simulasi saintifik: tetapkan biji, catatnya, dan anda boleh mengulangi hasil anda kemudian.

</bahagian kandungan>

Bagaimana Generator Bilangan Acak Pseudorandom Berfungsi

PRNG moden menggunakan algoritma matematik untuk menghasilkan rentetan dengan sifat statistik yang cemerlang. Algoritma yang paling digunakan adalah Mersenne Twister (MT19937), yang dikembangkan oleh Matsumoto dan Nishimura pada tahun 1997. Ia mempunyai tempoh 2^19937 − 1 (sebuah nombor dengan hampir 6,000 digit) sebelum mengulang, melepasi semua ujian statistik standar untuk keacakan, dan merupakan generator bilangan acak lalai dalam Python, PHP, Ruby, R, dan banyak bahasa lain.

Algoritma yang lebih baru termasuk xoshiro/xoroshiro (sangat cepat, kecil keadaan) dan PCG (Generator Congruential Permuted) (sifat statistik yang cemerlang dengan keadaan kecil). Untuk aplikasi kriptografi, algoritma PRNG standard ini tidak mencukupi — generator bilangan acak kriptografi yang selamat (CSPRNG) diperlukan kerana algoritma PRNG standard boleh diprediksi jika penyerang tahu cukup output.

Pengguna-pengguna pelayan web menyediakan akses ke CSPRNG melalui API crypto.getRandomValues(), yang pengguna ini menggunakan untuk menghasilkan bilangan acak. Ini lebih selamat daripada Math.random(), yang menggunakan PRNG yang mudah dan tidak pernah digunakan untuk aplikasi yang sensitif keamanan.

AlgoritmaTempohKecepatanCriptografi?Digunakan Dalam
Math.random()Tergantung kepada implementasiSangat cepatTidakJS Pelayan Web (tidak kriptografi)
Mersenne Twister2^19937 − 1CepatTidakPython, R, MATLAB
xoshiro256**2^256 − 1Sangat cepatTidakRust, .NET, Julia
PCG-642^128CepatTidakNumPy, banyak bahasa
ChaCha20CepatYaLinux /dev/urandom, TLS
FortunaSederhanaYamacOS, iOS, Windows

Penggunaan Biasa untuk Bilangan Acak

Permainan dan Hiburan: Gulingan dadu, mengacaukan kad, penghasilan aras permainan prosedural, sistem giliran hadiah, pengacauan perilaku NPC. Seluruh pengalaman permainan roguelike (Nethack, Spelunky, Hades) bergantung pada keacakan yang berkualiti tinggi yang kelihatan adil tetapi tidak dapat diprediksi.

Loteri dan Raffle: Pemilihan acak untuk hadiah, hadiah, pemilihan juri, pilihan giliran, dan pengagihan terhad yang adil di antara peserta. Pemilihan acak yang sebenar memastikan tiada bias.

Simulasi Saintifik (Metodologi Monte Carlo): Bilangan acak menggerakkan simulasi Monte Carlo, yang menggunakan pengambilan acak berulang untuk menghampirkan hasil matematik kompleks. Aplikasi termasuk menghampirkan π, menghampirkan nilai derivatif kewangan, menghampirkan reaksi nuklear, memproses cuaca, dan kajian interaksi ubat.

Statistik dan Kajian: Pengambilan acak untuk kajian, pengasingan acak dalam ujian kawalan (uji kawalan acak), menghasilkan contoh bootstrap untuk jarak kepercayaan, dan pengujian silang dalam pembelajaran mesin semua memerlukan bilangan acak.

Kriptografi dan Keamanan: Penghasilan kunci untuk enkripsi, menghasilkan token sesi, cabaran CAPTCHA, kod satu kali (OTP/2FA), nilai garam untuk penghashan kata laluan, dan nilai nonce dalam protokol kriptografi semua memerlukan keacakan yang berkualiti tinggi. Keacakan yang lemah dalam aplikasi kriptografi boleh membawa kepada kebocoran keamanan yang sebenar.

Pengaturcaraan Komputer: Penghasilan data ujian, ujian beban, pengujian guruh (menemukan kecacatan dengan memberi input acak kepada perisian), ujian A/B, pengasingan acak (seperti ciri "acak" Spotify), dan ujian simulasi.

Adil dan Harapan Statistik

Generator Bilangan Acak yang Adil memberikan setiap nilai dalam rentang kemungkinan yang sama. Untuk rentang 1–6 (seperti dadu), setiap nombor harus muncul kira-kira 1/6 ≈ 16.67% kali dalam banyak kali giliran. Tetapi dalam jangka pendek, ketidakseimbangan adalah normal dan dijangka — ini adalah apa yang statistik sebenarnya memberitahu kita.

Undang-Undang Bilangan Besar menyatakan bahawa dengan bilangan ujian meningkat, frekuensi yang diamati akan menyimpang ke arah kemungkinan teori. Gulingkan dadu 12 kali dan anda mungkin melihat {1,3,5,6,2,1,4,3,2,6,5,4} — bukan tepat 2 kali setiap nombor. Gulingkan 60,000 kali dan anda akan melihat sangat dekat dengan 10,000 kali setiap nombor. Penyimpangan ini dijamin oleh undang-undang, tetapi pola jangka pendek tidak.

Penipuan Pemain adalah kepercayaan yang salah bahawa hasil lampau mempengaruhi hasil masa depan dalam acara acak yang bebas. Mendapatkan 5 kepalang berterusan tidak membuat ekor "tertunggu". Setiap lemparan adalah bebas; koin tidak mempunyai kenangan. Secara serupa, generator bilangan acak yang baru-baru ini mengeluarkan 7 tidak kurang mungkin mengeluarkan 7 lagi pada panggilan seterusnya.

RentangKemungkinan per NilaiFrekuensi yang Diharapkan (per 1000)Kasus Penggunaan Biasa
1–250%500Simulasi lemparan koin
1–616.67%167Simulasi lemparan dadu
1–1010%100Pemilihan desimal
1–521.92%19Deck kad
1–1001%10Peratusan/ penggunaan am
1–1,000,0000.0001%0.001Simulasi tiket loteri

Generator Bilangan Acak dalam Sains: Metodologi Monte Carlo

Metodologi Monte Carlo menggunakan pengambilan acak untuk menyelesaikan masalah yang sukar atau mustahil secara analitik. Dinamakan sempena kasino Monaco (untuk alasan yang jelas), metodologi ini mengubah masalah yang keras dan menentu menjadi masalah probabiliti yang dapat diselesaikan dengan simulasi.

Menganggarkan π: Menghasilkan titik acak dalam persegi unit (x,y setiap satu uniform dalam [0,1]). Hitung berapa banyak yang jatuh dalam lingkaran unit (x² + y² ≤ 1). Nisbah adalah π/4. Dengan 1 juta titik acak, anda boleh menganggarkan π sehingga 3–4 tempat desimal. Ini bukan cara yang cekap untuk menganggarkan π, tetapi ia menunjukkan kekuatan bilangan acak dengan indah.

Modelan Kewangan: Harga Opsyen Black-Scholes dan Nilai Risiko dihitung menggunakan ribuan kemungkinan laluan masa depan menggunakan bilangan acak. Setiap laluan simulasi mewakili satu kemungkinan masa depan. Distribusi hasil di seluruh jutaan simulasi memberikan distribusi kemungkinan kembali portfolio.

Perkembangan Dadah: Simulasi Monte Carlo model interaksi molekul dadah, memprediksi berapa kemungkinan kandidat dadah untuk berikat dengan protein sasaran. Ini mengurangkan bilangan ujian makmal yang diperlukan, menyelamatkan bilionan dolar dalam perkembangan farmaseutikal.

Menghasilkan Bilangan Acak Unik (Tanpa Penggantian)

Sekaligus anda memerlukan bilangan acak yang tidak berulang — misalnya, mengacaukan deck kad, mengalokasikan peserta ke kumpulan, atau memilih pemenang loteri. Ini dipanggil pengambilan tanpa penggantian (berbanding dengan pengambilan dengan penggantian, di mana nilai yang sama boleh muncul beberapa kali).

Algoritma standard untuk ini ialah goyangan Fisher-Yates (juga dikenali sebagai gurauan Knuth). Untuk satu array n elemen: bermula dari elemen terakhir, tukar dengan elemen acak yang dipilih dari array keseluruhan (termasuk dirinya), kemudian pindah ke elemen kedua terakhir, tukar dengan elemen acak dari yang masih tinggal, dan terus. Hasilnya ialah permutasi acak yang seragam dalam masa O(n).

Untuk menghasilkan k bilangan acak unik dari rentang [min, max]: buat array semua nilai dalam rentang, apli gurauan Fisher-Yates, ambil elemen pertama k. Ini memastikan setiap kombinasi k nilai sama kemungkinan — contoh pengambilan yang sebenar tanpa penggantian.

Angka Acak dalam Pembuatan Keputusan Harian

Generator angka acak ternyata berguna untuk keputusan-keputusan harian:

Membuat Keputusan: Ketika dua pilihan yang sama baiknya ada, angka acak dapat membuat keputusan tanpa berpikir terlalu lama. Penelitian menunjukkan bahwa ketika orang memikirkan terlalu lama pada pilihan yang benar-benar setara, mereka memperkenalkan bias yang membuat mereka kurang bahagia dengan hasilnya daripada jika mereka telah memilih secara acak.

Pengaturan Jadwal dan Perencanaan: Jadwal rotasi acak memastikan keadilan dalam waktu. Siapa yang memilih terlebih dahulu dalam draft fantasi, siapa yang mendapatkan shift yang diinginkan, topik mana yang dibahas pertama kali dalam pertemuan — pengaturan acak menghilangkan favoritisme dan persepsi ketidakadilan.

Belajar dan Latihan: Mahasiswa yang menggunakan flashcard mendapatkan manfaat dari pengaturan acak — itu mencegah pembelajaran "petunjuk konteks" (mengetahui jawaban kartu 15 karena Anda baru saja menjawab kartu 14). Penginterleaving latihan acak adalah teknik yang terbukti (interleaved practice) yang memperkuat retensi jangka panjang dibandingkan dengan latihan yang diblokir.

Insiprasi Kreatif: Penulis, seniman, dan musisi menggunakan generator kata acak, generator prompt, dan alat konstrain acak untuk mengatasi gangguan kreatif. Konstrain yang diberikan secara acak seringkali memaksa solusi kreatif yang tidak terduga dan menarik.

Soalan Lazim

Adakah generator ini benar-benar acak?

Ia menggunakan API crypto.getRandomValues() pelayan browser, yang merupakan generator angka acak kriptografik (CSPRNG). Untuk permainan, keputusan, statistik, dan rancangan undian, ini tidak dapat dibedakan dari keacakan sebenarnya. Untuk keacakan sebenarnya (dari fenomena fizikal), gunakan RNG peranti keras atau perkhidmatan seperti random.org.

Bolehkah saya menghasilkan angka acak tanpa ulangan?

Ya — ini dipanggil pengambilan tanpa penggantian. Pengiraan menggunakan algoritma guris-guris Fisher-Yates: hasilkan semua nilai dalam rentas, guris mereka secara acak, kembalikan nilai N pertama. Ini menjamin setiap nilai muncul sekali sahaja dan setiap kombinasi sama kemungkinannya.

Apakah kemungkinan mendapatkan nombor yang sama dua kali?

Dengan penggantian (modus standard), untuk rentas N nilai, kemungkinan mendapatkan nilai yang sama dalam dua tarikan berturut-turut ialah 1/N. Untuk rentas 1–100: 1% setiap pasang. Dalam banyak tarikan, ulangan dijangka dan normal. Dengan "tidak ulangan" modus, duplikasi berturut-turut mustahil oleh reka bentuk.

Bolehkah saya menggunakan ini untuk pilihan nombor loteri?

Benar-benar. Tetapkan rentas untuk menepati loteri (contohnya, 1–49) dan aktifkan "tidak ulangan" untuk memilih nombor unik. Setiap kombinasi sama kemungkinannya — tiada nombor atau kombinasi lebih atau kurang kemungkinannya untuk menang. Loteri itu sendiri acak, jadi mana-mana kaedah pilihan sama sahnya.

Apakah biji benih dalam penghasilan angka acak?

Biji benih ialah nilai permulaan untuk generator angka acak. Biji benih yang sama sentiasa menghasilkan siri yang sama. Ini berguna untuk simulasi yang boleh diulang — tetapkan biji benih, jalankan simulasi, catat biji benih, dan anda boleh mengulangi siri acak yang sama kemudian untuk pemeriksaan atau pembaikan.

Bagaimana saya memilih item acak dari senarai?

Angka item 1 sehingga N, kemudian hasilkan nombor bulat acak dari 1 hingga N. Item yang berkaitan ialah pilihan acak anda. Contohnya, untuk memilih secara acak dari 7 ahli pasukan, hasilkan nombor bulat acak dari 1 hingga 7. Setiap orang mempunyai kemungkinan 1/7 ≈ 14.3% untuk dipilih.

Adakah Math.random() dalam JavaScript benar-benar acak?

Tidak. Math.random() ialah PRNG sederhana dengan tiada jaminan keselamatan. Ia sesuai untuk permainan dan aplikasi yang tidak sensitif tetapi tidak pernah digunakan untuk tujuan kriptografik (penghasilan kunci, token, kata laluan). Untuk aplikasi keselamatan, selalu gunakan crypto.getRandomValues() atau CSPRNG pelayan.

Apakah perbezaan antara PRNG dan CSPRNG?

PRNG (Generator Angka Pseudorandom) ialah deterministik dan cepat tetapi dapat ditebak jika anda tahu cukup tentang keadaannya. CSPRNG (Generator Angka Kriptografik) menambahkan sifat bahawa keluarannya tidak dapat dibezakan dari keacakan sebenar walaupun jika penyerang menyaksikan beberapa keluaran. CSPRNG diperlukan untuk kata laluan, kunci, dan token.

Apakah simulasi Monte Carlo?

Simulasi Monte Carlo menggunakan bilangan acak yang besar untuk menaksir kuantiti kompleks. Contoh: menaksir π dengan meletakkan titik secara acak dalam persegi yang mengandungi bulatan — nisbah titik di dalam bulatan kepada titik keseluruhan konsisten dengan π/4. Kaedah Monte Carlo digunakan dalam kewangan, fizik, kejuruteraan, dan statistik.

Bolehkah generator angka acak mempunyai bias?

Generator angka acak yang berkualiti rendah boleh menunjukkan bias — nilai tertentu muncul lebih kerap daripada yang lain, atau korelasi antara nilai berturut-turut. Kualiti diukur dengan ujian statistik (Ujian NIST, TestU01 BigCrush). Algoritma moden seperti Mersenne Twister, PCG, dan xoshiro melepasi semua ujian piawaian dan tidak mempunyai bias untuk tujuan praktikal.

Angka Acak dalam Permainan dan Pemrosesan Prosedural

Permainan video dibangun di atas acak. Dari penghasilan blok acak di Minecraft's pembuatan dunia hingga giliran musuh AI, keacakan yang berkualitas menciptakan pengalaman yang dapat diputar ulang, tidak terduga. Pemrosesan konten prosedural (PCG) menggunakan angka acak dengan keterbatasan matematika untuk menciptakan konten yang luas dengan upaya manual minimal — 18 kuintilion planet di No Man's Sky semua dihasilkan prosedural dari biji acak.

Permainan roguelike seperti Nethack, Spelunky, dan Hades mendefinisikan genre melalui pemrosesan level prosedural. Setiap jalannya menghasilkan dungeon yang berbeda, penempatan musuh, dan distribusi item. Permainan biji ini keacakan sehingga jalannya terasa adil (RNG tidak menentukan kematian secara acak) sementara tetap tidak terduga. Banyak permainan roguelike menampilkan biji sehingga pemain dapat memainkan jalannya yang sama atau berbagi biji yang menarik dengan orang lain.

Permainan meja telah menggunakan keacakan fisik (dadu, kartu yang dicampur, spinner) selama berabad-abad. Sama seperti digital, harus meniru distribusi yang tepat. Roll dadu standar menggunakan distribusi uniformitas atas {1,2,3,4,5,6}. Tarik dari dek yang dicampur menggunakan permutasi acak. Beberapa permainan menggunakan kolam dadu (roll beberapa dadu, ambil yang tertinggi) atau dadu dengan keuntungan/kekurangan — memerlukan perancangan statistik yang teliti untuk mencapai distribusi probabilitas yang diinginkan.

Menghasilkan Distribusi Lain dari Angka Acak Uniform

Sebagian besar RNG menghasilkan angka yang terdistribusi uniformitas antara 0 dan 1 (atau bilangan bulat dalam rentang). Kita sering memerlukan angka acak yang mengikuti distribusi lain — normal, eksponensial, Poisson, dll. Ini dapat dihasilkan dari angka acak uniform menggunakan metode transformasi.

Transformasi Box-Muller menghasilkan angka acak yang terdistribusi normal dari dua angka acak uniform U₁ dan U₂: Z₁ = √(−2ln(U₁)) × cos(2πU₂) dan Z₂ = √(−2ln(U₁)) × sin(2πU₂). Kedua Z₁ dan Z₂ mengikuti distribusi normal standar N(0,1). Skala dengan Z × σ + μ untuk mendapatkan N(μ,σ²).

Metode Inversi Transformasi menggunakan inversi dari fungsi distribusi kumulatif (CDF). Untuk distribusi eksponensial dengan laju λ: X = −ln(1−U)/λ di mana U adalah uniform dalam [0,1]. Ini secara langsung mengubah variabel acak uniform menjadi variabel yang terdistribusi eksponensial. Metode ini berlaku untuk distribusi mana pun yang memiliki CDF yang dapat diinversi secara analitik.

Ujian Statistik untuk Acak

Bagaimana kita memastikan bahwa generator angka acak sebenarnya acak? Ujian statistik memeriksa apakah suatu rangkaian angka menunjukkan pola yang tidak mungkin dalam suatu rangkaian acak yang sebenarnya. Suite Ujian Statistik NIST mengandung 15 ujian yang digunakan untuk mengevaluasi RNG untuk aplikasi kriptografi. Ujian utama termasuk:

Ujian Frekuensi (Monobit): Mengecek bahwa 0 dan 1 terjadi dengan frekuensi yang sama dalam representasi biner dari angka yang dihasilkan. Uang koin yang biasa mendarat ke atas 60% dari waktu akan gagal ujian ini.

Ujian Run: Mengecek bilangan konsekutif identik (run). Terlalu banyak run panjang dari bit yang sama menunjukkan pola yang tidak acak. Rangkaian acak yang sebenarnya memiliki distribusi run yang dapat diprediksi.

Ujian Serial: Mengecek apakah pasangan, triplik, atau kuadrupel nilai terjadi dengan frekuensi yang sama. Jika generator menghasilkan urutan 1,2,3,4,5,6,1,2,3,4,5,6... ia melewati ujian frekuensi tetapi gagal ujian serial — pasangan tidak acak.

Ujian StatistikApa yang DidedeteksiSuite Ujian NIST?
Frekuensi (Monobit)Frekuensi 0/1 yang tidak samaYa
Ujian RunTerlalu banyak/few nilai konsekutif identikYa
AutokorelasiNilai terkait dengan nilai sebelumnyaYa
Chi-SquareDistribusi tidak seragamYa (uji frekuensi)
Spasi Ulang TahunSpasi yang terlalu teratur antara nilaiMelalui TestU01
DiehardUjian pola berulangSuite ujian terpisah

TestU01 "BigCrush" dianggap sebagai ujian yang paling ketat praktis — ia menjalankan 106 ujian dan menolak banyak algoritma yang melewati ujian suite yang lebih kecil. Algoritma modern seperti PCG dan xoshiro melewati BigCrush; algoritma lama seperti generator kongruen linear yang digunakan dalam perpustakaan C awal gagal beberapa ujian dan tidak boleh digunakan untuk aplikasi kualitas.

Menggunakan Generator Angka Acak Ini

Atur nilai minimum dan maksimum untuk menentukan rentang Anda. Atur "berapa banyak" untuk menghasilkan angka-angka beberapa kali. Aktifkan pilihan "tidak ada ulang" untuk menghasilkan daftar angka unik (pengambilan tanpa pengganti) — ideal untuk pilihan lotere, taruhan kartu, atau menugaskan peserta ke kelompok tanpa ulang. Rangkaian hasil yang dihasilkan menggunakan API acak kriptografi browser Anda untuk hasil yang berkualitas tinggi cocok untuk tujuan non-keamanan apa pun. Untuk penggunaan lotere, hasilkan angka yang sama dengan jumlah pilihan yang diperlukan dalam rentang lotere Anda. Untuk penggunaan undian, tugaskan nomor-nomor berurutan ke entri dan tarik nomor yang sesuai. Hasil dihasilkan segar setiap kali Anda mengklik tombol — hasil sebelumnya tidak disimpan atau dilacak.