c++随机数不是随机的
c++ random numbers not random
我试图使用c++生成随机数,但它们似乎不是很随机。我当然知道它们只是伪随机的,但我发现的是,它们甚至都不是伪随机的。这是我的代码
#include <iostream>
#include <time.h>
int main(){
srand (time(NULL));
std::cout << (double) rand() / (double) RAND_MAX;
return 0;
}
我从编译和运行这个cpp文件得到的结果总是以0.63开头,后面跟着一些看似随机的数字。
我错过了什么吗?我没有使用srand正确初始化随机数生成器吗?为什么数字不是在0到1之间随机的?
谢谢
看起来rand
在编译器上的实现非常差,其中初始随机值高度依赖于种子值。在开始使用返回值之前,您可以生成和丢弃几个随机值。
或者,最好不要调用rand
。使用<random>
标头提供的功能
你可以试试:
struct timeval;
gettimeofday(&time, NULL);
srand(hash3(time.tv_sec, time.tv_usec, getpid()));
hash3:
unsigned int hash3(unsigned int h1, unsigned int h2, unsigned int h3)
{
return ((h1 * 2654435789U) + h2) * 2654435789U) + h3;
}
根本问题是rand()
被C手册描述为"坏随机数生成器"。您应该使用<random>
库。看到
rand()和random()函数有什么区别?
此外,如果您故意只比较srand()
播种生成器后生成的第一个值,则不清楚,但通常,使用伪随机数生成器时,将它们播种一次,然后生成一系列数字。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在将数字随机生成为数组期间从内存输出随机数的数组
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++:随机数列表:x 个随机整数
- 使用来自更好的随机源的随机数播种伪随机生成器
- 如何在当前时间,显示标头并将随机出生日期分配给X人数(C )时如何播种随机数生成器(C )
- 随机数函数未正确随机化 (C++)
- C++随机数生成器,不是随机的,但总是返回相同的数字
- 生成用于形成二维随机点的随机数对
- 选择一个随机方块并生成一个随机数
- 给定二进制随机数生成器生成随机浮点数的正确方法
- 随机数生成器 (rand) 不是随机的?
- 随机数不是那么随机
- 指定的随机分布使用哪种类型的随机数引擎
- c++中的随机数生成第一个数字不是随机的
- 函数生成随机数,不那么随机
- c++随机数生成器:如何在每次执行时使数字随机
- c++随机数不是随机的
- c++随机数生成不随机
- 我的c++随机数不是随机的