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

标签 c random

我想生成给定范围内的伪随机整数,而不引入因使用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/

相关文章:

生成随机二维多边形的算法

c++ - 随机字符串生成产生奇怪的字符

c - 使用日期和时间函数

C 为什么我的代码中创建的线程数不一致?

c - 如何检查或更改 USLT (ID3) 中的编码?

c# - 从目录中选择随机文件

objective-c - Objective-C - 随机结果为 1 或 -1

algorithm - 糟糕的随机数生成器

c - 我的代码是否正确翻译了必须满足的特定条件?

python - 将 python 脚本编译为 C 时如何修复 Cython header 错误