【问题标题】:What is the difference between `std::random_device` and `std::mt19937_64`? [duplicate]`std::random_device` 和 `std::mt19937_64` 有什么区别? [复制]
【发布时间】:2020-03-09 01:43:46
【问题描述】:

我是密码学和相关内容的新手。我一直在研究 PRNG 和 CPP 库,它们提供了我在现代 CPP 中找到的 std::random_devicestd::mt19937_64 的这些设施。但是,它们之间有什么区别以及我们应该如何/在哪里使用它们(究竟在什么情况下)?

【问题讨论】:

  • 取决于实现,std::random_device 可能会产生加密安全的随机数。 std::mt19937 从不产生密码安全的随机数。您可以播种 std::mt19937 甚至序列化其内部状态。你不能用 std::random_device 做到这一点。 std::mt19937 通常比 std::random_device 快得多。

标签: c++ random


【解决方案1】:

std::random_device 是一个均匀分布的整数随机数生成器,可生成非确定性随机数。它可以与分布一起使用以生成随机数,但是一旦熵池耗尽,std::random_device 的许多实现的性能会急剧下降,因此建议仅使用它来播种伪随机数生成器,例如 @987654323 @。它们“不那么随机”,但不会像以前那样退化,因此它们经常像这样在链中使用:

std::random_device rd;
std::mt19937_64 eng(rd());
std::uniform_int_distribution<int> uniform_dist(1, 6)

std::cout << uniform_dist(eng);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2014-07-22
    • 2023-04-09
    • 2020-10-16
    • 2020-09-30
    • 2021-10-16
    相关资源
    最近更新 更多