gpt4 book ai didi

c++ - 哪些机器支持非确定性 random_device?

转载 作者:太空狗 更新时间:2023-10-29 21:11:35 24 4
gpt4 key购买 nike

我需要从不同的 C++ 随机数生成算法中获取数据,为此我创建了一些程序。其中一些使用伪随机数生成器,而另一些使用 random_device(非确定性随机数生成器)。下面的程序属于第二组:

#include <iostream>
#include <vector>
#include <cmath>
#include <random>
using namespace std;

const int N = 5000;
const int M = 1000000;
const int VALS = 2;
const int ESP = M / VALS;

int main() {
for (int i = 0; i < N; ++i) {
random_device rd;
if (rd.entropy() == 0) {
cout << "No support for nondeterministic RNG." << endl;
break;
} else {
mt19937 gen(rd());
uniform_int_distribution<int> distrib(0, 1);
vector<int> hist(VALS, 0);
for (int j = 0; j < M; ++j) ++hist[distrib(gen)];
int Y = 0;
for (int j = 0; j < VALS; ++j) Y += abs(hist[j] - ESP);
cout << Y << endl;
}
}
}

正如您在代码中看到的,我检查熵是否大于 0。我这样做是因为:

Unlike the other standard generators, this [random_device] is not meant to be an engine that generates pseudo-random numbers, but a generator based on stochastic processes to generate a sequence of uniformly distributed random numbers. Although, certain library implementations may lack the ability to produce such numbers and employ a random number engine to generate pseudo-random values instead. In this case, entropy returns zero. Source

如果结果数据将是伪随机的(不是不确定的),检查熵值允许我中止数据获取。请注意,我假设如果 rd.entropy() == 0 为真,则我们处于伪随机模式。

不幸的是,由于熵为 0,我所有的试验都生成了一个没有数据的文件。我的问题是:我可以对我的计算机做什么,或者我在哪里可以找到允许我获取数据的机器?

最佳答案

您引用的来源误导了您。 standard说是

double entropy() const noexcept; 

Returns: If the implementation employs a random number engine, returns 0.0. Otherwise, returns an entropy estimate for the random numbers returned by operator(), in the range min() to log2(max()+1).

还有一个 better reference有一些经验观察

Notes

This function is not fully implemented in some standard libraries. For example, LLVM libc++ always returns zero even though the device is non-deterministic. In comparison, Microsoft Visual C++ implementation always returns 32, and boost.random returns 10.

在实践中,几乎所有主要实现(针对通用计算机)都具有非确定性 std::random_device。您的测试有很高的假阴性率。

关于c++ - 哪些机器支持非确定性 random_device?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com