我正在尝试使用rand()%(范围)生成一堆随机数.以下是我的代码设置方式:
srand(time(NULL));
someClass *obj = new someClass(rand()%range1,rand()%range2... etc ); // i.e. a number of random numbers one after the other
Run Code Online (Sandbox Code Playgroud)
每当我运行它时,似乎所有对rand()的调用都会生成相同的数字.我试过没有:(编辑:所有rand()不会生成相同的数字,最后读取编辑)
srand(time(NULL));
Run Code Online (Sandbox Code Playgroud)
然后,程序的每次执行都会产生相同的结果.
此外,由于对rand()的所有调用都在构造函数中,所以我不能一直重新调用它.我想我可以预先创建发送给构造函数的所有对象,然后在其间重新设置随机数生成器,但这似乎是一个不优雅的解决方案.
如何生成一堆不同的随机数?
编辑:看起来因为我在循环中创建了很多对象,所以每次重复循环srand(time(NULL))并重置序列时(因为time(NULL)的分辨率为秒),这就是为什么所有后续对象具有非常相似的属性.
如果您拨打srand 一次,则所有后续rand呼叫将返回(不同的)伪随机数.如果他们不这样做,你做错了.:)
除此之外,rand还是没用的.Boost.Random(或C++ 11标准库<random>头)提供了更强大的随机数生成器,具有更好,更现代的接口(例如,允许您拥有多个独立的生成器,不像rand使用单个全局种子)
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |