Tag: srand

`rand()`的用途 – 或者是谁应该调用`srand()`?

背景:我在我的代码中使用rand() , std::rand() , std::random_shuffle()和其他函数进行科学计算。 为了能够重现我的结果,我总是明确指定随机种子,并通过srand() 。 直到最近,当我发现libxml2还会懒惰地调用srand()的第一个用法 – 这是在我早期的srand()调用之后,这一切都运行良好。 我向libxml2提交了关于srand()调用的错误报告 ,但是我得到了答案: 然后初始化libxml2。 这是一个完全合法的电话来自图书馆。 你不应该指望没有其他人调用srand() ,而手册页也没有提到应该避免多次使用srand() 这实际上是我现在的问题。 如果一般的政策是每个lib都可以/应该/将会调用srand() ,而且我可以/可以在这里或那里调用它,但是我真的不知道这是多么的有用。 或者rand()如何有用呢? 这就是为什么我认为,一般(不成文)的政策是没有lib应该调用srand() ,应用程序应该在一开始只调用一次。 (不考虑multithreading,我想在这种情况下,无论如何你都应该使用不同的东西。) 我也试图研究一下其他库实际上叫做srand() ,但我没有find任何。 有没有? 我目前的解决方法是这个丑陋的代码: { // On the first call to xmlDictCreate, // libxml2 will initialize some internal randomize system, // which calls srand(time(NULL)). // So, do that first call here now, […]

build议初始化srand的方法?

我需要一个“好”的方法来初始化C ++中的伪随机数生成器。 我find一篇文章说: 为了生成随机数字,srand通常被初始化为一些与众不同的值,如与执行时间相关的值。 例如,函数time(在头ctime中声明)返回的值每秒都不相同,这对于大多数随机需求来说足够独特。 Unixtime对于我的应用程序来说不够独特。 有什么更好的方法来初始化这个? 奖励点,如果它是可移植的,但代码将主要在Linux主机上运行。 我正在考虑做一些pid / unixtimemath来获得int,或者可能从/dev/urandom读取数据。 谢谢! 编辑 是的,我实际上是每秒多次启动我的应用程序,而且碰到了碰撞。

srand函数返回相同的值

嘿,大家看看这个程序。 /* The craps game, KN king page 218 */ #include <stdio.h> #include <time.h> #include <stdbool.h> #include <stdlib.h> int roll_dice(void); bool play_game(void); int roll_dice(void) { int roll; getchar(); srand((unsigned) time(NULL)); roll = rand() % 13; if(roll == 0) roll = roll + 1; return roll; } bool play_game() { int sum = 0, wins = […]

Rand()%14仅生成值6或13

每当我运行下面的程序时,返回的值总是6或13。 #include <iostream> #include <fstream> #include <ctime> #include <cstdlib> using namespace std; //void randomLegs(); //void randomPush(); //void randomPull(); //void randomMisc(); int main(int argc, const char * argv[]) { srand(time(NULL)); //randomLegs(); cout << rand() % 14; return 0; } 今天和昨天我已经跑了近百次了。 谁能告诉我我做错了什么? 谢谢。 编辑:顺便说一句,如果我改变的范围()说,13或15它工作得很好。

srand() – 为什么只调用一次?

这个问题是关于这个问题的评论推荐的方法来初始化srand? 第一个评论说srand()应该只在应用程序中被调用一次。 为什么这样?