可能會嘗試這樣的事情: 我已經使用過很多次了,似乎工作得很好。
void SeedRandomNumGenerator()
{
unsigned int seed;
int fd;
fd = open("/dev/urandom", O_RDONLY);
if(fd)
{
read(fd, &seed, sizeof(seed));
close(fd);
srandom(seed);
}
}
/*
return a proper random number that uses the uniform distribution
of numbers returned by random() -- this is far better than
simply doing random() % limit
According to calculations, random() will at most be called twice
and usually only once per call to random_lim()
returns int between 0 and limit
so if you want a random number between 1-10 inclusive the call would
look like this: random_lim(9)+1
*/
int random_lim(int limit)
{
int divisor = RAND_MAX/(limit+1);
int retval;
do
{
retval = random()/divisor;
}while (retval > limit);
return(retval);
}
編輯:如果你想擺脫調用隨機()這個link提供了一個實現隨機()的行爲與隨機的()。
我想答案取決於rand()在你的系統上返回的範圍。你會比我們更瞭解......(如果你想告訴我們,這是RAND_MAX)。 – indiv 2014-09-01 22:14:34
您是否在安全相關的應用程序中使用它,如果rand函數(不一定是線性同餘算法,但幾乎肯定不是密碼安全的)很容易被破壞? – 2014-09-01 23:15:51
在您購買符合您要求的實施之前,您需要確定您的要求。 – 2014-09-01 23:32:53