相关疑难解决方法(0)

是否有使用时间来播种随机数生成的替代方案?

我试图在计算集群中同时运行一段代码(2000个实例左右)的几个实例.它的工作方式是我提交作业,集群将在节点每隔一段时间打开时运行它们,每个节点有几个作业.对于使用时间种子的随机数生成中的大量实例,这似乎产生相同的值.

我可以使用一个简单的替代方案吗?重复性和安全性并不重要,快速生成独特的种子.什么是最简单的方法,如果可能的话,跨平台方法会很好.

c random random-seed

30
推荐指数
5
解决办法
1万
查看次数

播种随机数生成器C++

我有两个问题.

  1. 还有什么其他方法可以在不使用C++的情况下为伪随机数生成器播种srand(time(NULL))

  2. 我问第一个问题的原因.我目前正在使用时间作为发电机的种子,但发电机返回的数量始终相同.我很确定原因是因为存储时间的变量在某种程度上被截断了.(我有一条警告信息说,"隐式转换失去整数精度:'time_t'(又名'long')到'unsigned int')我猜这是告诉我,实质上我的种子不会改变,直到明年为了我的目的,使用时间作为我的种子将工作得很好,但我不知道如何摆脱这个警告.

我之前从未收到过该错误消息,因此我认为它与我的Mac有关.它是64位OS X v10.8.我也在使用Xcode编写和编译,但在其他使用Xcode的计算机上我没有遇到任何问题.

编辑:经过多次玩弄和研究后,我发现了64位Mac的错误.(如果我弄错了,请纠正我.)如果你试图让你的mac选择1到7之间的随机数time(NULL)作为种子,你将总是得到数字4.总是.我最终mach_absolute_time()用来播种我的随机数发生器.显然这消除了我程序中的所有可移植性......但我只是一个爱好者.

Edit2:源代码:

#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, const char * argv[]) {

srand(time(NULL));

cout << rand() % 7 + 1;

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我再次运行此代码来测试它.现在它只返回3.这必须与我的计算机有关,而不是C++本身.

c++ random

5
推荐指数
3
解决办法
5万
查看次数

标签 统计

random ×2

c ×1

c++ ×1

random-seed ×1