我很惊讶地看到这个程序的输出:
#include <iostream>
#include <random>
int main()
{
std::mt19937 rng1;
std::mt19937 rng2;
std::uniform_real_distribution<double> dist;
double random = dist(rng1);
rng2.discard(2);
std::cout << (rng1() - rng2()) << "\n";
return 0;
}
is 0
- 即std::uniform_real_distribution
使用两个随机数来产生double
范围 [0,1) 内的随机值。我认为它只会生成一个并重新调整它。经过考虑,我猜这是因为std::mt19937
产生 32 位整数,而 double 是这个大小的两倍,因此不够“随机”。
问题:我如何一般地找出这个数字,即随机数生成器和浮点类型是否是任意类型?
编辑:我只是注意到我可以std::generate_canonical
改用,因为我只对 [0,1) 的随机数感兴趣。不确定这是否有所作为。