【问题标题】:how to set seed of RNG in c++?如何在 C++ 中设置 RNG 的种子?
【发布时间】:2014-02-11 18:25:11
【问题描述】:

谁能告诉我如何在 C++ 中生成相同的随机数值?

我知道在 Matlab 中我可以做到以下几点:

rng(1)
a= randi(10,1,10)

答案是一样的。例如

5     8     1     4     2     1     2     4     4     6

5     8     1     4     2     1     2     4     4     6

5     8     1     4     2     1     2     4     4     6

除非种子被重置,否则它将始终为我提供相同的值。

但我不知道如何在 C++ 中做到这一点。

【问题讨论】:

    标签: c++ matlab visual-c++ random c++-cli


    【解决方案1】:

    使用相同种子的两个不同初始化将生成 在后续调用 rand 时会产生相同的连续结果。

    如果种子设置为 1,则生成器将重新初始化为其初始值 值并产生与调用 rand 或之前相同的值 srand.

    #include <stdlib.h>     /* srand, rand */
    #include <time.h> 
    
    int random = rand();
    int next = rand();
    int next2 = rand();
    
    //another sequence
    srand (time(NULL));
    int 2random = rand();
    int 2next = rand();
    int 2next2 = rand();
    
    //will repeat the first sequence
    srand (1);
    int 3random = rand();
    int 3next = rand();
    int 3next2 = rand();
    

    【讨论】:

    • 以及我需要使用什么库
    【解决方案2】:

    您是否正在寻找作为随机数生成器种子的函数srand?它经常用于以当前时间播种,但如果需要,您可以使用它以固定值播种。

    【讨论】:

      【解决方案3】:

      创建一个 std::random_device 的实例,它可能提供不确定的统一随机数,并使用它来为您选择的随机数引擎播种:

      std::random_device rd;
      std::default_random_engine gen(rd());
      

      如果您想知道如何为 C 库函数 rand 播种,则需要使用 std::srand。它通常以当前时间为种子,std::time(0)

      当然,您没有理由不能使用 std::random_device 来播种 rand

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-11
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        • 2016-04-02
        • 2013-02-10
        • 2011-03-25
        • 2020-04-25
        相关资源
        最近更新 更多