我想生成给定范围内的伪随机整数,而不引入因使用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 中生成随机数
如果您想继续使用rand
和srand
,您可以执行以下操作:
int random(int N) {
return (double)rand()/RAND_MAX * N;
}
但您也可以寻找其他随机生成器,例如 Mersenne Twister。有很多可用的实现。
关于c - C 中的 random(int) 和 randomize(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976634/