在C中的两个设定值之间生成随机整数

时间:2013-10-31 12:31:59

标签: c

我希望在C中实现与python的random.randint类似的东西。

我会做类似的事情:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
srand(time(NULL));

int randInt(int lBound, int uBound){
    return (rand()%(uBound-lBound+1))+lbound;
}

但如果RAND_MAX不是uBound的倍数,那么分布会略有偏差。

是否有一种快速而肮脏的方式更好?

1 个答案:

答案 0 :(得分:0)

如果避免歪斜很重要,那么你需要做这样的事情。

int randInt(int lBound, int uBound){
    int rangesize = uBound-lBound+1; 
    if ((rangesize - 1 > RAND_MAX) || (rangesize < 0) || (lBound > uBound)) {
        // run in circles, scream and shout
    }
    int limit;
    if (rangesize < RAND_MAX) {
        limit = RAND_MAX - (((RAND_MAX % rangesize) + 1) % rangesize);
    } else {
        limit = RAND_MAX;
    ]
    int rv;
    do {
        rv = rand();
    } while (rv > limit);
    return rv % rangesize + lbound;
}