Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用概率生成C中的随机数_C_Random_Range - Fatal编程技术网

用概率生成C中的随机数

用概率生成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>

我知道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>

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));