Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang fungsi nombor rawak dalam C++

Penjelasan terperinci tentang fungsi nombor rawak dalam C++

王林
王林asal
2023-11-18 16:08:271475semak imbas

Penjelasan terperinci tentang fungsi nombor rawak dalam C++

Penjelasan terperinci tentang fungsi nombor rawak dalam C++

Nombor rawak memainkan peranan penting dalam pengaturcaraan komputer Ia boleh digunakan untuk mensimulasikan peristiwa rawak, menjana urutan nombor rawak dan aplikasi lain. Bahasa C++ menyediakan satu siri fungsi nombor rawak untuk memudahkan pembangun menjana dan menggunakan nombor rawak. Artikel ini akan memperkenalkan secara terperinci penggunaan dan langkah berjaga-jaga bagi fungsi nombor rawak dalam C++.

Dalam C++, fungsi nombor rawak terutamanya merangkumi dua aspek: fungsi penjanaan nombor pseudo-rawak dan fungsi nombor rawak tambahan.

Pertama, mari kita perkenalkan fungsi penjanaan nombor rawak pseudo dalam C++. Pustaka nombor rawak <rawak></rawak> yang diperkenalkan dalam C++11 menyediakan fungsi penjanaan nombor pseudo-rawak yang lebih fleksibel dan cekap. Ia terutamanya termasuk kelas penting berikut: <random></random> 提供了更加灵活和高效的伪随机数生成函数。其主要包括以下几个重要的类:

  1. std::random_device:该类用于生成真正的随机数种子,可以通过硬件随机数发生器或操作系统提供的随机数接口来获得。
  2. std::seed_seq:该类用于生成随机数种子序列,可以将多个种子值组合在一起生成种子序列,提供更加复杂的随机数生成方式。
  3. std::mt19937std::mt19937_64:这两个类是伪随机数引擎,它们使用梅森旋转算法生成高质量的伪随机数序列。std::mt19937使用32位整数作为状态,std::mt19937_64使用64位整数作为状态。
  4. std::uniform_int_distributionstd::uniform_real_distribution:这两个类是均匀分布的随机数分布器。std::uniform_int_distribution用于生成均匀分布的整数随机数,std::uniform_real_distribution用于生成均匀分布的实数随机数。

使用这些类可以实现伪随机数的生成。首先,我们需要使用 std::random_device 生成一个真正的随机数种子。然后,通过伪随机数引擎 std::mt19937std::mt19937_64 使用种子初始化,再使用分布器 std::uniform_int_distributionstd::uniform_real_distribution 生成随机数。

下面是一段示例代码,演示了如何生成一个均匀分布的整数随机数:

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 100);

    for (int i = 0; i < 10; ++i) {
        std::cout << dis(gen) << " ";
    }

    return 0;
}

运行上述代码,将会输出10个在1到100之间的随机整数。

除了伪随机数生成函数外,C++中还提供了一些辅助随机数函数,用于更方便地处理随机数。其中包括:

  1. std::rand:该函数生成一个0到RAND_MAX之间的伪随机整数,默认的RAND_MAX值为32767。需要注意的是,rand函数通常使用std::srand设置随机数种子,但是它只能生成相对较低质量的随机数。
  2. std::srand:该函数用于设置伪随机数生成器的种子值。一般来说,我们可以使用系统时间作为种子值,以保证每次运行程序生成的随机数序列都是不同的。
  3. std::shuffle:该函数用于随机打乱一个序列。它接受两个迭代器参数,将这段序列根据当前的伪随机数生成器重新排列。

辅助随机数函数通常是以C风格的函数(如randsrand

  1. std::random_device: Kelas ini digunakan untuk menjana benih nombor rawak sebenar, yang boleh dijana melalui penjana nombor rawak perkakasan atau operasi sistem Disediakan antara muka nombor rawak untuk mendapatkan.
  2. std::seed_seq: Kelas ini digunakan untuk menjana jujukan benih nombor rawak boleh digabungkan bersama untuk menghasilkan jujukan benih, memberikan yang lebih kompleks kaedah penjanaan nombor rawak.
  3. std::mt19937, std::mt19937_64: Kedua-dua kelas ini ialah enjin nombor pseudo-rawak yang menggunakan algoritma putaran Mersenne untuk menjana tinggi- urutan nombor Pseudo-rawak yang berkualiti. std::mt19937 menggunakan integer 32-bit sebagai status dan std::mt19937_64 menggunakan integer 64-bit sebagai status.
  4. std::uniform_int_distribution, std::uniform_real_distribution: Kedua-dua kelas ini adalah pengedar nombor rawak teragih seragam. std::uniform_int_distribution digunakan untuk menjana nombor rawak integer teragih seragam, dan std::uniform_real_distribution digunakan untuk menjana nombor rawak nyata teragih seragam.
Gunakan kelas ini untuk menjana nombor rawak pseudo. Pertama, kita perlu menggunakan std::random_device untuk menjana benih nombor rawak yang benar. Kemudian, gunakan pemulaan benih melalui enjin nombor pseudo-rawak std::mt19937 atau std::mt19937_64, dan kemudian gunakan pengedar std::uniform_int_distribution code> atau <code>std::uniform_real_distribution menjana nombor rawak.

Berikut ialah contoh kod yang menunjukkan cara menjana nombor rawak integer teragih seragam:

rrreee

Jalankan kod di atas dan 10 integer rawak antara 1 dan 100 akan dikeluarkan. 🎜🎜Selain fungsi penjanaan nombor pseudo-rawak, C++ juga menyediakan beberapa fungsi nombor rawak tambahan untuk mengendalikan nombor rawak dengan lebih mudah. Ini termasuk: 🎜
  1. std::rand: Fungsi ini menghasilkan integer pseudo-rawak antara 0 dan RAND_MAX, lalainya ialah RAND_MAXNilai ialah 32767. Perlu diingat bahawa fungsi <code>rand biasanya menggunakan std::srand untuk menetapkan benih nombor rawak, tetapi ia hanya boleh menjana nombor rawak yang agak berkualiti rendah.
  2. std::srand: Fungsi ini digunakan untuk menetapkan nilai benih penjana nombor rawak pseudo. Secara umumnya, kita boleh menggunakan masa sistem sebagai nilai benih untuk memastikan urutan nombor rawak yang dijana oleh program adalah berbeza setiap kali ia dijalankan.
  3. std::shuffle: Fungsi ini digunakan untuk mengocok jujukan secara rawak. Ia menerima dua parameter lelaran dan menyusun semula jujukan mengikut penjana nombor pseudo-rawak semasa.
🎜Fungsi nombor rawak tambahan biasanya wujud dalam bentuk fungsi gaya C (seperti rand dan srand), yang lebih ringkas dan lebih langsung untuk digunakan. Walau bagaimanapun, nombor rawak yang dijana oleh fungsi ini adalah berkualiti rendah dan tidak disyorkan untuk digunakan dalam pembangunan sebenar. Sebaliknya, menggunakan perpustakaan nombor rawak yang disediakan oleh C++11 adalah lebih fleksibel dan cekap. 🎜🎜Untuk meringkaskan, C++ menyediakan satu siri fungsi nombor rawak, termasuk fungsi penjanaan nombor pseudo-rawak dan fungsi nombor rawak tambahan. Antaranya, fungsi penjanaan nombor pseudo-rawak adalah lebih fleksibel dan cekap untuk digunakan, dan disyorkan untuk digunakan dalam pembangunan sebenar. Jika anda memerlukan cara yang lebih mudah dan lebih langsung untuk menjana nombor rawak, pertimbangkan untuk menggunakan fungsi nombor rawak tambahan. Apabila menggunakan sebarang fungsi nombor rawak, anda perlu memberi perhatian kepada menetapkan benih nombor rawak yang sesuai untuk memastikan urutan nombor rawak yang dijana mempunyai kualiti dan kebebasan yang tinggi. 🎜🎜Saya harap pengenalan artikel ini dapat membantu pembaca lebih memahami dan mengaplikasikan fungsi nombor rawak dalam C++. Jika anda ingin menggunakan fungsi berkaitan nombor rawak, adalah disyorkan untuk menggunakan perpustakaan nombor rawak yang diperkenalkan dalam C++11 untuk memanfaatkan sepenuhnya fleksibiliti dan kecekapannya. 🎜

Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi nombor rawak 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