0

我希望在 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;
}

但如果 R​​AND_MAX 不是 uBound 的倍数,则分布会略微偏斜。

有没有更好的快速而肮脏的方法?

4

1 回答 1

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;
}
于 2013-10-31T15:02:33.047 回答