【问题标题】:How Would I Make A Random Seed/Hash To Make Rand Actually Random? [duplicate]我将如何制作随机种子/哈希以使 Rand 实际上是随机的? [复制]
【发布时间】:2016-07-16 12:14:23
【问题描述】:

我将如何生成使 rand 实际上随机的种子或哈希?每次选择一个数字时,我都需要它进行更改。 c++ 新手,所以我不完全确定如何执行此操作。谢谢! :D

【问题讨论】:

  • @DevanshMohanKaushik -- 您建议的副本中引用的问题/答案是一个不好的建议,因为他们提倡使用时间作为种子 -- 这是不好的做法,可能导致进程之间的随机数重复同时该种子(想想网络服务器)
  • @soren 它还包含指向其他有用答案的链接,包括您在评论部分提到的答案。
  • 这个问题是针对 C++ 的,而标记的重复项是针对 C 的。

标签: c++ random


【解决方案1】:

如果不采样环境数据或访问量子随机数源,就没有所谓的“实际随机”随机数生成器。如果您需要真正的随机数,请考虑访问 ANU 随机数源 (http://qrng.anu.edu.au/FAQ.php#api)。

否则,Boost 会提供更健壮的伪 RNG,这应该足以满足大多数用途:http://www.boost.org/doc/libs/1_58_0/doc/html/boost_random.html

【讨论】:

  • 请注意,大部分 boost random 都是用 c++11 标准化的,可以通过 <random> 访问。
【解决方案2】:

在 C++11 中,您可以使用 std::random_device。我建议您观看link 以获得全面的指南。

视频链接中提取基本信息:你应该永远不要使用srandrand,而应该使用@987654325 @ 和 std::mt19937 -- 在大多数情况下,您需要以下内容:

#include <iostream>
#include <random>
int main() {
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_int_distribution<int> dist(0,99);
    for (int i = 0; i < 16; i++) {
        std::cout << dist(mt) << " ";
    }
    std::cout << std::endl;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多