C随机数生成(纯C代码,无库或函数)

Tri*_*ing 2 c random system-on-chip

我需要在C中生成一些随机数来测试和调试系统.该系统是一个定制硬件(SoC),具有有限的功能集,因此我只能使用基本的数学运算.

不,我不能在stdlib或math.h中使用随机数生成器.我需要自己写.那么是否有某种生成随机数的算法?

我知道一个简单的解决方案是在我的工作站上生成数字并将它们嵌入到模块中,但我不想这样做.

Hot*_*cks 6

只需在 CACM 10 月 88 日刊中挖掘 Park 和 Miller 的文章即可。

他们提出的一般算法是:

a = 16807;
m = 2147483647;
seed = (a * seed) mod m;
random = seed / m;
Run Code Online (Sandbox Code Playgroud)

尽管这篇文章包括了一些改进。

  • 我想最后一个除法应该使用浮点数,否则“随机”始终为零。 (3认同)

dlr*_*as2 5

随机数生成器基本上是一个特殊的*散列函数,它从起始种子递归运行.

我在我的C#代码中使用了MurmurHash2算法,效果很好.它实现起来非常快速和简单,经过测试,分布均匀,碰撞率低.该项目有几个不同的开源哈希函数,用C++编写,应该可以很容易地转换为C.


*特殊意思是我在一个值上运行哈希函数应该返回另一个看似随机(但确定)的值,这样输出似乎不会形成模式.此外,返回值的分布应该具有均匀分布.