gpt4 book ai didi

c - C 中的 random(int) 和 randomize()

转载 作者:行者123 更新时间:2023-12-03 03:41:21 26 4
gpt4 key购买 nike

我想生成给定范围内的伪随机整数,而不引入因使用rand()%N而产生的偏差。 .

我已阅读有关函数 random() 的信息和randomize()这似乎取代了 rand()srand()函数,但直接返回 random() 参数给定范围内的整数功能。在这两种情况下,函数似乎都在 stdlib.h 中。图书馆。

我遇到的问题是我无法使这些功能以某种方式工作。这是我为测试功能而编写的一个小测试代码。

#include <stdio.h>
#include <stdlib.h>

int main(){
randomize();
printf("%d\n",random(100));
return 0;
}

编译时使用 gcc -o test test.c它给出了一个错误

test.c: In function ‘main’:<br/>
test.c:6: error: too many arguments to function ‘random’

据我所知函数 random()仅采用一个整数参数来确定给定数字的范围。我做错了什么?

编辑:似乎这些对应于 TurboC 的一些旧东西。所以现在的问题是,如何制作“真正的”随机整数,使其不倾斜?我的方法是(按照 Vatine 的建议)

#include <stdio.h>
#include <stdlib.h>

int main(){
srand(time(NULL));
printf("%d\n",rand()/(RAND_MAX/100));
return 0;
}

这似乎产生了正确的结果。这是否会增加一些偏差,或者结果至少有相同的概率落入该范围内的任何数字?

最佳答案

man random 给了我:

   #include <stdlib.h>

long int random(void);

因此错误消息是正确的:“随机”函数的参数太多。

我不知道函数 randomize 并且我知道的 random 函数不接受任何参数。

但我确实在互联网上找到了这个(小心,你不应该使用这个代码,我只是说):

#ifndef __TURBOC__
#define randomize() srand48(getpid())
#define random(x) (lrand48() % x)
#endif

所以也许这是涡轮C旧的东西?我还找到了this example这往往会确认它是 Turbo C 特定的函数。

 如何在 C 中生成随机数

如果您想继续使用randsrand,您可以执行以下操作:

int random(int N) {
return (double)rand()/RAND_MAX * N;
}

但您也可以寻找其他随机生成器,例如 Mersenne Twister。有很多可用的实现。

关于c - C 中的 random(int) 和 randomize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976634/

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