- 前言
- 代码
通常想要使用随机数的时候,在网络上搜索,他们只会告诉你用srand播种。
而且是以秒为单位,这就有了个巨大的问题,而且这个问题在Windows系统中不算常见但是在Linux中的必出的问题。
代码通常网上的教程会教你这么写随机种子
srand((unsigned)time(NULL));
这样写没什么问题,但是如果你想执行一个非常快的语句,比如for循环,就会出现问题。
比如下面这段代码int arr[4096]; for(int x = 0; x < 4096; ++x) { arr[x] = rand(); }
此段代码在Windows中表示的可能不是特别明显,但在Linux中你就会发现输出的几乎都是同一个值。
为什么呢?因为它以秒为单位,而for循环执行的速度是非常快的。
我们自己编写一个随机数种子播种函数,然后在需要使用随机数时调用一次它。
这个随机数种子是以纳秒为单位的,就完美避免了以秒为单位出现的更新不及时的情况。
#include
#include
static void setRandomSeed()
{
clockid_t a = 0;
struct timespec p = {0, 0};
clock_gettime(a, &p);
srand((unsigned)p.tv_nsec);
}
此代码专门针对不同系统进行过改动,比如你可以将这段代码原封不动的从Windows移植到Linux中,执行不会出现任何问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)