Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menjana Nombor Rawak Benar Seragam dalam C?

Bagaimanakah Saya Boleh Menjana Nombor Rawak Benar Seragam dalam C?

Susan Sarandon
Susan Sarandonasal
2024-12-22 19:42:11687semak imbas

How Can I Generate Truly Uniform Random Numbers in C  ?

Menjana Nombor Rawak Secara Seragam pada Keseluruhan Julat

Anda berusaha untuk menjana nombor rawak yang diedarkan secara seragam dalam selang waktu tertentu, [min, maks]. Walau bagaimanapun, kaedah semasa anda menghasilkan nombor berkelompok di sekitar satu titik.

Mengelakkan rand()

Fungsi rand() selalunya tidak boleh dipercayai untuk menjana pengagihan seragam. Ia bergantung pada pengendali modulus yang boleh memperkenalkan bias.

Taburan Seragam C 11

Dalam C 11, pertimbangkan untuk menggunakan std::uniform_int_distribution untuk penyelesaian yang lebih dipercayai:

#include <iostream>
#include <random>

int main()
{    
    const int range_from  = min;
    const int range_to    = max;
    std::random_device                  rand_dev;
    std::mt19937                        generator(rand_dev());
    std::uniform_int_distribution<int>  distr(range_from, range_to);

    std::cout << distr(generator) << '\n';
}

Penjana Rawak Lain

Perpustakaan C 11 menawarkan pelbagai penjana rawak lain dengan pengagihan yang berbeza. Contohnya, std::shuffle boleh menyusun semula elemen bekas secara rawak.

Boost.Random Alternative

Jika C 11 tidak tersedia, pertimbangkan untuk menggunakan Boost.Random, yang menyediakan kefungsian yang serupa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Nombor Rawak Benar Seragam dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn