首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >rand()的实现

rand()的实现
EN

Stack Overflow用户
提问于 2009-07-22 18:31:35
回答 8查看 29.7K关注 0票数 20

我正在用C编写一些嵌入式代码,需要使用rand()函数。不幸的是,控制器的库中不支持rand()。我需要一个简单的实现,这是快速的,但更重要的是有很小的空间开销,产生相对高质量的随机数。有人知道要使用哪种算法或示例代码吗?

编辑:它是用于图像处理的,所以“相对高质量”意味着良好的周期长度和良好的均匀属性。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-22 18:40:16

看看这篇来自George Marsaglia的collection of random number generators。他是一位领先的随机数生成专家,所以我对他推荐的任何东西都很有信心。该列表中的生成器很小,一些生成器只需要几个无符号的长整型作为state。

Marsaglia的发电机绝对是“高质量”的,按照你的标准,周期长,分布均匀。它们通过了严格的统计测试,尽管它们不适用于密码学。

票数 24
EN

Stack Overflow用户

发布于 2009-07-24 22:22:33

LFSR113 from L'écuyer使用the C code

代码语言:javascript
复制
unsigned int lfsr113_Bits (void)
{
   static unsigned int z1 = 12345, z2 = 12345, z3 = 12345, z4 = 12345;
   unsigned int b;
   b  = ((z1 << 6) ^ z1) >> 13;
   z1 = ((z1 & 4294967294U) << 18) ^ b;
   b  = ((z2 << 2) ^ z2) >> 27; 
   z2 = ((z2 & 4294967288U) << 2) ^ b;
   b  = ((z3 << 13) ^ z3) >> 21;
   z3 = ((z3 & 4294967280U) << 7) ^ b;
   b  = ((z4 << 3) ^ z4) >> 12;
   z4 = ((z4 & 4294967168U) << 13) ^ b;
   return (z1 ^ z2 ^ z3 ^ z4);
}

非常高的质量和速度。不要使用rand()做任何事情。它比无用更糟糕。

票数 12
EN

Stack Overflow用户

发布于 2009-07-22 18:36:08

这里有一个指向ANSI implementation of a few random number generators的链接。

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

https://stackoverflow.com/questions/1167253

复制
相关文章

相似问题

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