用概率生成C中的随机数
我知道C中的rand()函数是均匀随机分布 那么,我如何生成一个概率范围内的随机数呢 实例用概率生成C中的随机数,c,random,range,C,Random,Range,我知道C中的rand()函数是均匀随机分布 那么,我如何生成一个概率范围内的随机数呢 实例 生成200个随机数,范围从-100到100是否小于20%的数字总数为负数?如果您希望在数字中精确地进行80-20除,然后,您只需从0-100范围内选择160数字,并从-100-0范围内选择40数字即可 (200的80%=160)。RAND\u MAX可以帮助: #include <stdio.h> #include <stdlib.h> #include <time.h>
生成200个随机数,范围从
-100
到100
是否小于20%的数字总数为负数?如果您希望在数字中精确地进行80-20除,然后,您只需从0-100
范围内选择160数字,并从-100-0
范围内选择40数字即可
(200的80%=160)。
RAND\u MAX
可以帮助:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static int rand_prob(void)
{
int r = rand();
if (r < RAND_MAX / 8) {
return -(r % 101);
} else {
return +(r % 101);
}
}
int main(void)
{
int i;
srand((unsigned)time(NULL));
for (i = 0; i < 200; i++) {
printf("%d\n", rand_prob());
}
return 0;
}
绘制从-100到+403的数字。如果该数字为正数,则除以4get x作为区间[1-100]中的随机数,如果x20得到某个正随机数?@AnttiHaapala这无法生成随机数-100到-25@Jean-BaptisteYunès负数的总和总是等于20%,因为rand()是均匀分布的随机数。不,不总是,它的平均值是20%,它可以少一些,也可以多一些。随机就是随机。。。统一意味着每个值的概率是相同的,仅此而已。我的意思是你有20%的机会得到一个负值,但这并不意味着你会有一个负值!有1/1.000.000的抽奖机会并下注1.000.000次并不意味着你会赢。你能解释一下随机的部分吗。谢谢是的,
RAND\u MAX
是RAND()
可以返回的最大数字,如果您得到的数字小于此最大数字/8,则您的概率为20%。
static int rand_prob(int percent, int min, int max)
{
int r = rand();
if (r < (RAND_MAX / percent / 10)) {
return -(r % (max - min + 1) + min);
} else {
return +(r % (max - min + 1) + min);
}
}
printf("%d\n", rand_prob(80, 0, 100));