我希望在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的倍数,那么分布会略有偏差。
是否有一种快速而肮脏的方式更好?
答案 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;
}