我正在尝试找到一个c函数,它可以生成一个32位随机/伪随机数,并且可以重现。(类似于rand/srand函数)。我不能使用urandom,因为我不能像使用srand/rand那样重现序列。我是否必须编写自己的函数,或者像这样的东西已经存在了?
谢谢
供将来参考,而其他人的建议是好的。我最终做了这样的事情:
uint32_t generateRandom (unsigned int randomSeed) {
uint32_t number = 0;
int randomNumber, x;
for (x=0; x<8;x++) {
randomNumber = rand_r(&randomSeed) % 16;
number |= (randomNumber<<(x*4));
randomSeed++;
}
return (number);
}发布于 2012-04-17 05:45:45
加入2个(或更多) rand()结果,以获得所需的位数。
糟糕的(因为它被夸大了)示例:
uint32_t bit0 = rand() & 1;
uint32_t bit1 = rand() & 1;
/* ... */
uint32_t bit31 = rand() & 1;
uint32_t whole = bit0 | (bit1 << 1) | ... | (bit31 << 31);发布于 2012-04-17 05:10:12
任何Linear congruential generator或Lagged Fibonacci generator都可以。Google会为你找到大量的最小实现。
正如注释中指出的,C标准函数srand + rand也可以很好地工作,所以您应该使用它。
发布于 2012-04-17 05:10:40
其中许多函数的编写方式是linear feedback shift register的一种变体。如果你想写你自己的代码,我会这样做。
https://stackoverflow.com/questions/10181685
复制相似问题