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.

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.

#include <iostream>
#include <random>

int main() {
    int min = 1;
    int max = 100;
    int quantity = 5;

    // Modern C++ random number generation
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(min, max);

    std::cout << "Modern C++ random numbers:" << std::endl;
    for (int i = 0; i < quantity; i++) {
        int num = dis(gen);
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Keluaran

Ini pratinjau browser, bukan eksekusi Java atau C++. Nilainya tidak cocok untuk kriptografi.

Pratinjau contoh

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.

Butuh Nomor Acak Cepat?

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

Buka Generator Angka Acak

Memahami Pembuatan Angka Acak C++

Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.

rand() Function

Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.

<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

Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.

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

rand() dan std::mt19937 bukan generator kriptografis. Untuk keamanan, gunakan pustaka kriptografi atau API sistem yang terdokumentasi; std::random_device bukan jaminan keamanan lintas platform.

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++

Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.

Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.

std::random_device bergantung pada implementasi dan dapat memakai mesin deterministik. Keluaran yang tidak dapat diprediksi tidak dijamin di semua platform.

Tips praktis

🎯

Hindari rand() untuk Kode Baru

Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.

🔒

Pilih seed secara eksplisit

Seed tetap mengulang urutan mesin yang sama. Mesin C++ tidak otomatis diinisialisasi dengan entropi sistem; pilih seed secara eksplisit bila diperlukan.

⚡

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

  • Algoritma rand() bergantung pada implementasi. C++11 memisahkan mesin seperti std::mt19937 dari distribusi; distribusi tidak memiliki mesin mt19937 bawaan.
  • Mersenne Twister (std::mt19937)
  • std::random_device bergantung pada implementasi dan dapat memakai mesin deterministik. Keluaran yang tidak dapat diprediksi tidak dijamin di semua platform.

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

Pertanyaan yang Sering Diajukan

Pendekatan C++ apa saja yang dibahas?

rand() klasik dengan srand(), library <random> modern, std::uniform_int_distribution, dan engine mt19937.

Apakah saya bisa menyesuaikan contohnya?

Ya. Atur nilai minimum, maksimum, dan jumlah di panel parameter lalu jalankan untuk melihat hasilnya.

Pendekatan mana yang direkomendasikan saat ini?

Library <random> dengan distribusi bernama dan engine tertentu; rand() masih ditemukan di kode lama tetapi kualitasnya lemah dan punya jebakan rentang nilai.

Bagaimana cara memberi seed pada generator?

std::random_device bergantung pada implementasi dan dapat memakai mesin deterministik. Keluaran yang tidak dapat diprediksi tidak dijamin di semua platform.

Berapa rentang nilai yang dikembalikan oleh rand() di C++?

rand() menghasilkan 0 hingga RAND_MAX, termasuk kedua batas. Periksa platform: Microsoft CRT memakai 32767; implementasi lain dapat berbeda.

Apakah rand() aman secara kriptografi?

rand() dan std::mt19937 bukan generator kriptografis. Untuk keamanan, gunakan pustaka kriptografi atau API sistem yang terdokumentasi; std::random_device bukan jaminan keamanan lintas platform.

Bagaimana cara menghasilkan float acak di C++?

Gabungkan std::mt19937 dengan std::uniform_real_distribution yang dikonfigurasi sesuai interval Anda, misalnya 0.0 hingga 1.0, lalu panggil dist(generator). Hasilnya berupa double di mana batas bawah disertakan tetapi batas atas dikecualikan.

Apakah rand() thread-safe di C++?

Keamanan rand() untuk banyak thread bergantung pada implementasi. Gunakan mesin per thread atau sinkronkan akses ke mesin bersama.

C++ standard draft: rand / srand · C++ standard draft: random_device · C++ standard draft: uniform_int_distribution

Referensi & Sumber Daya