C++中的隨機數生成器——random詳細解析

一、c++ random函數

c++中提供的random庫是一個偽隨機數生成器。偽隨機數是指,雖然不是真正隨機生成的,但是具有隨機數的特徵。random庫中包含兩個主要的類:

    1. std::linear_congruential_engine:線性同餘發生器,該發生器可以生成最簡單、最頻繁的偽隨機數。具體實現方式是通過給定一個公式,生成下一次的隨機數。
    2. std::mersenne_twister_engine: 梅森旋轉發生器,其生成的偽隨機數與線性同餘發生器相比具有更高的隨機性和更長的周期。(梅森旋轉發生器曾在Mersenne Prime搜索中使用)

這兩個類都是模板類,需要通過參數指定隨機數的類型。

二、c++ random.value取值範圍

random類中的生成的隨機數取值範圍是在閉區間[0, max()]之間的整數,其中,max()是隨機數生成器可以生成的最大值。對於大多數情況下,實現中的最大值都是固定的。

三、c++ random頭文件

使用c++ random庫,需要引入頭文件random。

#include <random>

四、c++ random浮點數

如果需要生成外部取值範圍的隨機數,需要進行一定的格式化和類型轉換。有兩種方式:

    1. (double)rand() / RAND_MAX
    2. uniform_real_distribution函數

uniform_real_distribution有兩個參數,一個是均勻分布的起始值,一個時結束值。

    std::default_random_engine rand_gen;
    std::uniform_real_distribution<double> value(-10.0 , 10.0);
    double a = value(rand_gen);

五、c++ random函數用法

以下是一個示常式序,演示了c++ random庫的基本用法:

#include <iostream>
#include <random>
using namespace std;
int main()
{
    std::default_random_engine rand_gen;
    std::uniform_int_distribution<> distrib(0, 10);
    for (int i = 0; i < 10; ++i) {
         cout << distrib(rand_gen) << " ";
    }
    cout << endl;
    return 0;
}

六、c++ random函數限制範圍

c++ random的生成隨機數的範圍是可以通過指定相應的分布函數來實現,比如:
uniform_int_distribution 生成整數分布(下面的代碼生成1到10的整數分布);
uniform_real_distribution生成實數分布。

    std::default_random_engine rand_gen;
    std::uniform_int_distribution<int> distrib(1, 10);
    for (int i = 0; i < 10; ++i) {
         cout << distrib(rand_gen) << " ";
    }
    cout << endl;

七、c++ random的用法

c++ random庫還包含了很多其他的隨機分布函數,例如binomial_distribution、normal_distribution等等,可以根據實際需要選擇對應的函數使用。

以下是使用normal_distribution生成正態分布的示例代碼:

    std::default_random_engine rand_gen;
    std::normal_distribution<double> distrib(0.0 , 2.0);
    for (int i = 0; i < 10; ++i) {
         cout << distrib(rand_gen) << " ";
    }
    cout << endl;

八、c++ randomize函數

c++ randomize函數是一個初始化函數,用於獲取更長的隨機序列。使用方式如下示例:

    std::random_device rd;
    std::default_random_engine rand_gen(rd());
    std::uniform_int_distribution<int> distrib(1, 10);
    for (int i = 0; i < 10; ++i) {
         cout << distrib(rand_gen) << " ";
    }
    cout << endl;

九、c++ random不能使用/無法使用

需要注意,random庫裡面的所有函數,不要用在要求高精度隨機數的地方,因為這些函數都是偽隨機數而不是真正隨機數。在數據加密和密鑰生成時,更應該使用更強的隨機數生成器,例如sodium庫中的隨機數函數。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248193.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:25
下一篇 2024-12-12 13:25

相關推薦

  • 打造照片漫畫生成器的完整指南

    本文將分享如何使用Python編寫一個簡單的照片漫畫生成器,本文所提到的所有代碼和技術都適用於初學者。 一、環境準備 在開始編寫代碼之前,我們需要準備一些必要的環境。 首先,需要安…

    編程 2025-04-29
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • 如何使用random生成不重複的隨機數

    在編程開發中,我們經常需要使用隨機數來模擬一些場景或生成一些數據。但是如果隨機數重複,就會造成數據的不準確性。這時我們就需要使用random庫來生成不重複且隨機的數值。下面將從幾個…

    編程 2025-04-29
  • 如何使用Python導入Random庫

    Python是一門優秀的編程語言,它擁有豐富的第三方庫和模塊。其中,Random庫可謂是最常用的庫之一,它提供了用於生成隨機數的功能。對於開發人員而言,使用Random庫能夠提高開…

    編程 2025-04-29
  • Python生成隨機數的多種方法

    本文將從以下幾個方面詳細介紹如何使用Python生成隨機數。 一、random模塊的使用 Python內置的random模塊能夠生成偽隨機數,使用該模塊,可以生成隨機數、隨機整數等…

    編程 2025-04-29
  • Python隨機數生成器

    Python隨機數生成器是一個常用的工具,它可以生成各種類型的隨機數,包括整數、浮點數和字元串等,廣泛用於模擬、遊戲、加密、測試等多個領域。本文將從多個方面對Python隨機數生成…

    編程 2025-04-28
  • Python隨機函數random的使用指南

    本文將從多個方面對Python隨機函數random做詳細闡述,幫助讀者更好地了解和使用該函數。 一、生成隨機數 random函數生成隨機數是其最常見的用法。通過在調用random函…

    編程 2025-04-27
  • Python生成1~100隨機數(代碼示例)

    本文將詳細闡述Python生成1~100隨機數,包括其定義、應用場景、實現方法等,幫助讀者更好的掌握該技能。 一、定義 隨機數是指在一定範圍內任選的數值,能夠在一定程度上保證數據的…

    編程 2025-04-27
  • 使用詞雲圖生成器網站,讓文字更美麗

    詞雲圖是一種非常實用的工具,通過它可以直觀地展示出文字內容的重點。而作為一個全能編程開發工程師,你一定需要掌握一些生成詞雲圖的技巧。這篇文章將從多個方面詳細闡述使用詞雲圖生成器網站…

    編程 2025-04-27
  • 如何使用Python生成不重複的隨機數?

    要在Python中生成不重複的隨機數,我們可以使用random模塊中的sample函數,該函數可以從指定序列中隨機選擇指定數量的獨立元素。 一、生成指定範圍的隨機數 如果要生成指定…

    編程 2025-04-27

發表回復

登錄後才能評論