random()函数只吐出大数字

时间:2014-02-21 23:05:55

标签: c random

我正在使用random()函数,我想知道是否有一个原因,我总是得到8-10位数字。我只是想确保我的程序没有问题。感谢。

这是功能:

void random_array(int* p, int size) {
    /*seed random number generator */
    srandom(time(NULL));
    int i;
    for(i = 0; i < size; i++)
        *(p+i) = random();
}

4 个答案:

答案 0 :(得分:4)

嗯,从数学角度来说,获得大数字的机会远远超过(相对)小数字的机会。例如,如果你选择一个带有(1-4)位数的随机数,那么它在范围(0-99)内的几率只有1%。

话虽如此,如果你想要更小的数字,你可以随机模数取一定的数字:

a = random() % 100; // this will give you a random number from 0 to 99
b = 10 + random() % 15; // random number from 10 to 24

答案 1 :(得分:3)

8-10位数字的数字:10,000,000,000 - 100,000,000 = 9,900,000,000(99亿)

0-7位数字的数量:10,000,000(1000万)

换句话说,每1 0-7位数字有990个8-10位数字。因此,对于每990个8-10位数字,您可以获得大约1 0-7位数字。

简单地说,它是因为它们中有更多

答案 2 :(得分:0)

您期望从random()收到多少个数字?

如果要限制生成数字的大小,只需使用模数运算符将结果限制为余数(在下面的示例中为0到999之间的数字):

*(p+i) = random() % 1000;

答案 3 :(得分:0)

从数学的角度来看,很可能是因为大数字......不仅仅是小数字,所以是的。它更有可能获得这样的数字。

要生成自定义间隔随机数,请使用

之类的内容

http://ideone.com/bWbBgJ

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

// Generate random numbers in the min-max interval
void random_array(int* p, int size, int min, int max) {
    /*seed random number generator */
    srandom(time(NULL));
    int i;
    for(i = 0; i < size; i++)
        *(p+i) = (random() % max) + min;
}

int main(void) {

    int array[3];
    random_array(array, 3, 0, 12);

    printf("%d\n", array[0]);
    printf("%d\n", array[1]);
    printf("%d\n", array[2]);

    return 0;
}