首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机生成器

随机生成器
EN

Stack Overflow用户
提问于 2012-04-17 05:02:57
回答 5查看 298关注 0票数 0

我正在尝试找到一个c函数,它可以生成一个32位随机/伪随机数,并且可以重现。(类似于rand/srand函数)。我不能使用urandom,因为我不能像使用srand/rand那样重现序列。我是否必须编写自己的函数,或者像这样的东西已经存在了?

谢谢

供将来参考,而其他人的建议是好的。我最终做了这样的事情:

代码语言:javascript
复制
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);
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-17 05:45:45

加入2个(或更多) rand()结果,以获得所需的位数。

糟糕的(因为它被夸大了)示例:

代码语言:javascript
复制
uint32_t bit0 = rand() & 1;
uint32_t bit1 = rand() & 1;
/* ... */
uint32_t bit31 = rand() & 1;

uint32_t whole = bit0 | (bit1 << 1) | ... | (bit31 << 31);
票数 2
EN

Stack Overflow用户

发布于 2012-04-17 05:10:12

任何Linear congruential generatorLagged Fibonacci generator都可以。Google会为你找到大量的最小实现。

正如注释中指出的,C标准函数srand + rand也可以很好地工作,所以您应该使用它。

票数 2
EN

Stack Overflow用户

发布于 2012-04-17 05:10:40

其中许多函数的编写方式是linear feedback shift register的一种变体。如果你想写你自己的代码,我会这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10181685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档