gpt4 book ai didi

c - 为什么我的 C 随机数生成器只返回 "42"?

转载 作者:太空狗 更新时间:2023-10-29 11:23:40 26 4
gpt4 key购买 nike

虽然这是一个非常棒的意外功能,但它却成为“洗牌”一组“卡片”的糟糕方式。我得到相同数字的事实告诉我,我在每次挑选不同的种子时遇到了一些问题。我使用 srand48time(NULL) 调用不当吗?我是否遗漏了一些潜在的逻辑缺陷?迭代之间是否没有足够的时间让 time() 的值不同?

代码在 Linux 上运行。

void shuffle()

{
int i_rnd; /* Integer random number, range 0..100 */
int i_rnd2;
card tempCard; /*temporary card to facillitate swapping*/
int i = 0; /*can't use a FOR loop 'cause we're not using c99 standard*/
while(i < 1000)
{

srand48( (unsigned) time( NULL ) ); /* Seed the random number generator */
i_rnd = (int) ( drand48() * 100);
i_rnd = i_rnd%52; // return a random number 0-51
i_rnd2 = (int) ( drand48() * 100);
i_rnd2 = i_rnd2%52; // return a random number 0-51
/*we have two random numbers, now exchange the two objects with the
/ picked array indices */
tempCard = cardDeck[i_rnd];
cardDeck[i_rnd]=cardDeck[i_rnd2];
cardDeck[i_rnd2]=tempCard;
//swap complete. increment counter so we can eventually get out of the while
i++;

}

return;

}

最佳答案

您需要为伪随机数生成器一次播种,而不是每次使用它时。

许多(大多数?)伪随机数生成器 (PRNG) 在给定特定种子值的情况下是确定性的。如果每次循环执行时 time() 都返回相同的值,则在每次使用之前用相同的值为 PRNG 播种,因此当您查询随机数时它会返回相同的值.

关于c - 为什么我的 C 随机数生成器只返回 "42"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com