最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中獲取隨機(jī)數(shù)的常用方法小結(jié)

 更新時(shí)間:2025年01月15日 08:25:26   作者:夢(mèng)_魚  
這篇文章主要為大家詳細(xì)介紹了C++中獲取隨機(jī)數(shù)的幾種常用方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下

1.C++中獲取隨機(jī)數(shù)的幾種方法

隨機(jī)數(shù)基本概念

隨機(jī)數(shù):在一定范圍內(nèi)[a, z],每個(gè)數(shù)出現(xiàn)的概率相等并且無(wú)法預(yù)測(cè)下一個(gè)數(shù)的數(shù)值序列。

偽隨機(jī)數(shù)生成器(PRNG)

  • 原理:由一個(gè)狀態(tài)寄存器和一個(gè)更新函數(shù)組成,初始狀態(tài)由種子決定,更新?tīng)顟B(tài)會(huì)根據(jù)當(dāng)前狀態(tài)生成下一個(gè)狀態(tài),并輸出一個(gè)偽隨機(jī)數(shù)
  • 種子:偽隨機(jī)數(shù)生成器的初始值,決定了隨機(jī)數(shù)開(kāi)始時(shí)的狀態(tài),由于隨機(jī)數(shù)基于算法與隨機(jī)數(shù)生成器初始時(shí)的狀態(tài)產(chǎn)生隨機(jī)序列,因此相同的種子產(chǎn)生完全相同的隨機(jī)序列

2. C++中獲取隨機(jī)數(shù)

2.1 基本流程

設(shè)置隨機(jī)數(shù)種子

獲取隨機(jī)數(shù)(整數(shù)、浮點(diǎn)數(shù))

2.2 隨機(jī)數(shù)種子來(lái)源

time() 函數(shù)

獲取當(dāng)前時(shí)間戳,在多線程場(chǎng)景下,由于time函數(shù)的精度有限,可能產(chǎn)生相同的種子,生成相似的隨機(jī)序列

std::random_device

是一個(gè)非確定性的隨機(jī)數(shù)源,從操作系統(tǒng)或硬件設(shè)備重獲取真正的隨機(jī)信息

2.3獲取隨機(jī)數(shù)

C cstdlib庫(kù)中rand函數(shù)

#include <ctime>
#include <cstdlib>
#include <iostream>

int main() {
    // 設(shè)置隨機(jī)數(shù)種子
    std::srand(time(nullptr));
    std::cout << "RAND_MAX" << RAND_MAX << std::endl;
    for (int i=0; i<10;++i) {
        // 獲取隨機(jī)數(shù)
        std::cout << "random value: " <<  rand() <<  std::endl;
        // 通過(guò) % 取余獲取指定范圍的隨機(jī)數(shù)
        std::cout << "random range 1 100: " << rand() % 100 << std::endl;
    }
};

C++ random庫(kù) (c++11)

#include <random>
#include <iostream>

int main() {
    // 指定種子
    std::default_random_engine engine(std::random_device{}());
    int count = 10;
    // 指定范圍:整數(shù)
    std::uniform_int_distribution<int> rand_int_generator(0, 100);
    for (int i=0; i<10; ++i) {
        std::cout << "int random value:" <<  rand_int_generator(engine) << std::endl;
    }
    
    // 指定范圍:浮點(diǎn)數(shù)
    std::uniform_real_distribution<double> rand_double_generator(0, 1);
    for (int i=0; i<10; ++i) {
        std::cout << "double random value:" <<  rand_double_generator(engine) << std::endl;
    }
};

隨機(jī)性要求較高使用 std::mt19937作為引擎

#include <random>
#include <iostream>

int main() {
    // 指定種子
    std::mt19937 engine(std::random_device{}());
    int count = 10;
    // 指定范圍:整數(shù)
    std::uniform_int_distribution<int> rand_int_generator(0, 100);
    for (int i=0; i<10; ++i) {
        std::cout << "int random value:" <<  rand_int_generator(engine) << std::endl;
    }

    // 指定范圍:浮點(diǎn)數(shù)
    std::uniform_real_distribution<double> rand_double_generator(0, 1);
    for (int i=0; i<10; ++i) {
        std::cout << "double random value:" <<  rand_double_generator(engine) << std::endl;
    }
};

3. Mersenne Twister (馬特賽特旋轉(zhuǎn)算法)

3.1工作原理

Mersenne Twister 算法維護(hù)一個(gè)內(nèi)部狀態(tài)向量,這個(gè)向量的長(zhǎng)度通常為 n個(gè)w -bit 的字。對(duì)于最常見(jiàn)的 MT19937 版本,n=624且w=32

初始化

首先使用一個(gè)種子(可以是任意整數(shù))初始化內(nèi)部狀態(tài)向量。通常會(huì)對(duì)種子進(jìn)行一些處理,將其擴(kuò)展到內(nèi)部狀態(tài)向量的長(zhǎng)度

狀態(tài)更新

  • 通過(guò)一個(gè)復(fù)雜的位操作函數(shù)對(duì)狀態(tài)向量進(jìn)行更新,這個(gè)函數(shù)被稱為 “twist” 操作。在 MT19937 中,它使用了一系列的移位、異或和與操作,將狀態(tài)向量中的元素進(jìn)行混合和更新
  • 經(jīng)過(guò)多次 “twist” 操作,狀態(tài)向量中的元素會(huì)以一種復(fù)雜的方式發(fā)生變化,保證了下一個(gè)隨機(jī)數(shù)的不可預(yù)測(cè)性

隨機(jī)數(shù)提取

從更新后的狀態(tài)向量中提取隨機(jī)數(shù)。通常使用一個(gè)函數(shù)將狀態(tài)向量中的元素映射到所需的輸出范圍。例如,對(duì)于生成 32 位的隨機(jī)數(shù),直接使用狀態(tài)向量中的元素,而對(duì)于生成小于 32 位的隨機(jī)數(shù),則會(huì)對(duì)狀態(tài)向量中的元素進(jìn)行適當(dāng)?shù)慕財(cái)嗷蛭徊僮鱽?lái)生成所需的隨機(jī)數(shù)

3.2 特點(diǎn)

1.長(zhǎng)周期

Mersenne Twister 的周期通常是 2^19937-1,這是一個(gè)巨大的數(shù)字,使得生成的隨機(jī)數(shù)序列非常長(zhǎng),能夠避免在實(shí)際應(yīng)用中出現(xiàn)周期短導(dǎo)致的重復(fù)序列問(wèn)題

2.高維均勻分布

生成的隨機(jī)數(shù)在高維空間中具有良好的均勻分布特性,這對(duì)于需要多個(gè)隨機(jī)數(shù)進(jìn)行模擬或計(jì)算的情況非常重要

3.隨機(jī)性質(zhì)量高

通過(guò)復(fù)雜的位操作和狀態(tài)轉(zhuǎn)移函數(shù)來(lái)產(chǎn)生隨機(jī)數(shù),克服了一些簡(jiǎn)單隨機(jī)數(shù)生成器(如線性同余發(fā)生器)的缺點(diǎn),如生成的隨機(jī)數(shù)序列的可預(yù)測(cè)性和低質(zhì)量

到此這篇關(guān)于C++中獲取隨機(jī)數(shù)的常用方法小結(jié)的文章就介紹到這了,更多相關(guān) C++獲取隨機(jī)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 實(shí)例解析C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的采用

    實(shí)例解析C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的采用

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中簡(jiǎn)單工廠模式的采用實(shí)例,在簡(jiǎn)單工廠模式中程序往往利用封裝繼承來(lái)降低耦合度,需要的朋友可以參考下
    2016-03-03
  • 隨機(jī)數(shù)字去掉重復(fù)和排序的方法

    隨機(jī)數(shù)字去掉重復(fù)和排序的方法

    用計(jì)算機(jī)隨機(jī)生成了N個(gè)0到1000000000(包含0和1000000000)之間的隨機(jī)整數(shù)(N≤5000000),對(duì)于其中重復(fù)的數(shù)字,只保留一個(gè),把其余相同的數(shù)去掉。然后再把這些數(shù)從小到大排序。
    2013-03-03
  • C語(yǔ)言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++聚合體初始化aggregate initialization詳細(xì)介紹

    C++聚合體初始化aggregate initialization詳細(xì)介紹

    這篇文章主要介紹了C++聚合體初始化aggregate initialization,C++有很多初始化對(duì)象的方法。其中之一叫做 聚合體初始化(aggregate initialization) ,這是聚合體專有的一種初始化方法
    2023-02-02
  • C和C++中實(shí)現(xiàn)對(duì)數(shù)據(jù)的流加密RC4算法

    C和C++中實(shí)現(xiàn)對(duì)數(shù)據(jù)的流加密RC4算法

    文章介紹了RC4流密碼算法,涵蓋其概述、特點(diǎn)(高效、簡(jiǎn)單、適用性廣)、原理(密鑰流生成與異或加密)、初始化步驟及C/C++實(shí)現(xiàn)代碼,強(qiáng)調(diào)實(shí)際應(yīng)用需加強(qiáng)安全性,如密鑰管理與復(fù)雜加密庫(kù)的使用
    2025-10-10
  • 淺談C++中的string 類型占幾個(gè)字節(jié)

    淺談C++中的string 類型占幾個(gè)字節(jié)

    本篇文章小編并不是為大家講解string類型的用法,而是講解我個(gè)人比較好奇的問(wèn)題,就是string 類型占幾個(gè)字節(jié)
    2013-08-08
  • C++通過(guò)控制臺(tái)訪問(wèn)deepseek接口并進(jìn)行對(duì)話

    C++通過(guò)控制臺(tái)訪問(wèn)deepseek接口并進(jìn)行對(duì)話

    這篇文章主要為大家詳細(xì)介紹了C++如何通過(guò)控制臺(tái)訪問(wèn)deepseek接口并進(jìn)行對(duì)話,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • C語(yǔ)言菜鳥基礎(chǔ)教程之判斷

    C語(yǔ)言菜鳥基礎(chǔ)教程之判斷

    C語(yǔ)言判斷結(jié)構(gòu)要求程序員指定一個(gè)或多個(gè)要評(píng)估或測(cè)試的條件,以及條件為真時(shí)要執(zhí)行的語(yǔ)句(必需的)和條件為假時(shí)要執(zhí)行的語(yǔ)句(可選的)
    2017-10-10
  • VC++時(shí)鐘函數(shù)

    VC++時(shí)鐘函數(shù)

    VC中提供了很多關(guān)于時(shí)間操作的函數(shù),編寫程序時(shí)我們可以跟據(jù)定時(shí)的不同精度要求選擇不同的時(shí)間函數(shù)來(lái)完成定時(shí)和計(jì)時(shí)操作
    2015-06-06
  • C++實(shí)現(xiàn)紅黑樹(shù)應(yīng)用實(shí)例代碼

    C++實(shí)現(xiàn)紅黑樹(shù)應(yīng)用實(shí)例代碼

    紅黑樹(shù)它一種特殊的二叉查找樹(shù),這意味著它滿足二叉查找樹(shù)的特征,但是也有許多自己的特性,這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)紅黑樹(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

龙口市| 二手房| 承德县| 都昌县| 团风县| 连平县| 改则县| 威海市| 军事| 巴彦淖尔市| 白沙| 昭觉县| 福州市| 兴国县| 临海市| 古浪县| 那曲县| 太湖县| 根河市| 独山县| 临泉县| 衡南县| 宣威市| 康平县| 会同县| 耒阳市| 腾冲县| 广南县| 安陆市| 肥城市| 合江县| 潞西市| 察隅县| 绥宁县| 含山县| 河南省| 阳西县| 平顶山市| 鹰潭市| 江都市| 蒲江县|