gpt4 book ai didi

c - 生成真随机数

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:53 26 4
gpt4 key购买 nike

我想在不使用 rand/srand urandom 等的情况下模拟随机发送 52 张标准卡...

这是我的随机数函数

int rand2(int lim)
{
static int a = 34; // could be made the seed value
a = (a * 32719 + 3) % 32749;
return ((a % lim) + 1);
}

我将知道卡片是否已经弹出的结构(0 = 否,1 是)

typedef struct          s_game
{
int *cards;
int state;
unsigned int dat_rand;
} t_game;

int main()
{
t_game game;
int i;
int rd;

i = 0;
game.cards = malloc(sizeof(*game.cards) * 52);
while(i < 52)
{
rd = rand2(52);
if(game.cards[rd] == 0)
{
game.cards[rd] = 1;
printf("i:%d\n rd: %d\n", i, rd);
i++;
}
}
}

但我的输出总是相同的,每张卡片都是同时交付的,所以我正在寻找更好的随机函数或不同的方式来填充我的交付

最佳答案

当然,您的数字序列将始终相同,计算机在这个级别上具有极高的确定性。

要改进您的生成器,请使用例如“播种”它计算机的当前正常运行时间,这是一种经典方式。当然,只要种子相同,它仍会生成相同的序列。

更好的解决方法是 "cryptographically secure pseudorandom numbers" ,它们不是 C 的一部分,所以你必须做一些特定于平台的事情来掌握一些。不确定您为什么说您不想“想要”使用它;您必须获得适当的随机数。

此外,由于计算机非常确定,因此生成“真实”(或只是“好”)随机数非常困难。期望你自己解决它是不合理的,特别是因为(无意冒犯)你似乎对 C 编程很陌生。就我个人而言,在尝试推出我自己的安全随机数之前,我肯定会犹豫很长时间发电机。

关于c - 生成真随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090400/

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