Tag: srand

随机数彼此不匹配

我想用C生成不同的数字。 我们可以使用stdlib库和srand函数生成一个随机数。 例如; 我想生成0到5之间的随机数。 #include #include #include int main(void) { int i; int n = 4; int array[3]; srand(time(NULL)); for(i = 0; i < n; i++) { array[i] = rand() % 5; printf("%d\n", array[i]); } return 0; 但是相同的数字可能在这里重合。就像这样: 2 4 4 1 我怎么能阻止这个?

64位随机发生器的种子

我目前正在运行一个带有8个以上管道(线程)的multithreading仿真应用程序。 这些管道运行非常复杂的代码,该代码依赖于种子生成的随机序列。 然后将序列归结为单个0/1。 在将种子从主线程传递到处理管道之后,我希望这种“随机处理”是100%确定性的。 所以,我可以在第二次运行中复制结果。 所以,例如:(我有这个编码,它的工作原理) Pipe 1 -> Seed: 123 -> Result: 0 Pipe 2 -> Seed: 123 -> Result: 0 Pipe 3 -> Seed: 589 -> Result: 1 当我需要运行100M或更多这些过程然后平均结果时,就会出现问题。 可能只有100M中的1个是1,其余的都是0.很明显,我不能用32bit种子为srand() 100M随机值。 是否可以使用VS2010中的64位种子播种srand(),或使用等效方法? rand()在2 ^ 32之后重复自身还是没有(有一些内部隐藏状态)? 谢谢

随机数和多个srand调用

我正在编写一个程序,它将在循环中生成大量随机数。 我试图使这些数字更难以预测(不仅是为了安全,而是为了避免multithreading上的冲突)。 我注意到许多文档建议在程序中只调用一次srand 。 例如: C中的随机数 ,选择的答案是“作为一般规则,只在程序中调用一次srand()”。 但为什么? 做这样的事情为什么会这么糟糕: int THIS_THREAD_SEED; int randomness() { ++THIS_THREAD_SEED; int i; for(i=0 i<1000; i++) { unsigned n = rand_r(&THIS_THREAD_SEED) / RAND_MAX; /* do something with n */ } return 0; } int do_something() { int i; for(i=0; i<1000; i++) { randomness(); } } 因此,每个函数调用一次更改种子,而不是每个程序一次。 这样,无论有多少线程在运行,没有两个线程都会有相同的随机数列表……对吗? 更新假设我为每个线程都有一个唯一的种子,或者在全局SEED上使用互斥锁来防止竞争条件。

如何为每个玩家生成不同的随机数?

两位玩家都获得相同的随机数! 我希望每个玩家得到一个不同的数字,因为他们掷骰子。 这是代码: #include #include #include int roll_a_dice(void); int main(int argc, const char *argv[]) { int flag; int answer1 = roll_a_dice(); int answer2 = roll_a_dice(); printf(“Die 1 (rolled by player 1): %d\n”, answer1); printf(“Die 2 (rolled by player 2): %d\n”, answer2); if (answer1>answer2) { printf(“Player 1 is starting!\n”); flag = 1; } else { printf(“Player […]

避免使用srand()重复生成种子

我有一个典型的情况,我需要生成一批随机数。 我使用了一个循环,每次传递产生100个随机数: for(int i=0; i<npasses; i++) { srand(time(NULL)); //Initialize seed for(int j=0; j<100; j++) printf("%d ", rand()%10); printf("\n"); //New line after 100 numbers } 现在,内循环在不到一毫秒的时间内执行。 结果,time()的值没有变化。 这会将种子(srand())重新初始化为相同的值,并且我的随机数是重复的。 任何人都可以建议解决方法/修复。

将未初始化的变量传递给srand是个好主意吗?

将未初始化的变量传递给srand而不是time(NULL)结果time(NULL)是否是个好主意? 它是一个#include和一个函数调用较少。 示例代码: #include int main(void) { { usigned seed; //uninitialized srand(seed); } //other code return 0; } 代替 #include #include int main(void) { srand(time(NULL)); //other code return 0; }

rand()返回相同的数字

我在C中用rand()做了一个简单的例子,但是函数总是返回相同的数字,尽管我使用的是srand()。 这是代码: #include #include #include int generate(int min, int max) { srand(time(NULL)); return rand() % (max – min + 1) + min; } int main() { int i; for (i = 0; i < 10; i++) { printf("Number random %d = %d\n", i, generate(1, 100)); } return 0; } 执行: 数字随机0 = 40数字随机1 = 40数字随机2 […]

使用pthread在C中生成随机数的最正确方法是什么

我有几个并发运行的线程,每个线程都必须生成随机数。 我想了解是否存在要遵循的模式,以了解在主线程中使用srand初始化随机生成器是否正确,或者每个线程是否必须初始化其自己的随机生成器。 似乎rand / srand没有被设计为与线程一起使用,我想知道如何处理线程和随机数。 谢谢 编辑:我需要纯随机数,但我也有兴趣为测试目的生成确定性序列。 我在Linux上,但我更喜欢尽可能地编写代码。

srand(1)和srand(0)之间有什么区别

我刚刚发现srand(1)在调用srand (如参考文献中定义)之前将C(++)的PRNG重置为状态的困难方式。 然而,种子0似乎做同样的事情,或者在调用srand之前的状态似乎使用种子0.这两个调用之间有什么区别或者他们做同样事情的原因是什么? 例如这段代码( 在Ideone上执行 ) #include #include int main() { for (int seed = 0; seed < 4; seed++ ) { printf( "Seed %d:", seed); srand( seed ); for(int i = 0; i < 5; i++ ) printf( " %10d", rand() ); printf( "\n"); } return 0; } 回报 Seed 0: 1804289383 846930886 1681692777 […]

C中的随机数

for(i = 0; i < n; i++){ srand(time(NULL)); printf("%d ", time(NULL)); for(j = 0; j < (n-1); j++){ a[i][j] = rand(); } } 我尝试生成随机数,但它们是相同的…我尝试srand(i * time(NULL)) 。 不管……我该怎么办? 数组声明: int** a; int i; printf(“Enter array size: “); scanf(“%d”, &n); a = (int**)calloc(n, sizeof(int)); for(i = 0; i < n; i++) a[i] = (int*)calloc(n-1, sizeof(int));