C中的srand函数

时间:2010-03-07 06:25:28

标签: c srand

我正在尝试在嵌入式C中编写随机数生成函数,其中我不能包含math.h文件。这就是为什么我无法使用种子srand功能。

除了时间之外,除了时间之外还有其他任何种子方式吗?

4 个答案:

答案 0 :(得分:3)

  1. srand位于stdlib.h,而不是math.h。要随着时间推移播种,请添加time.h以使用time(NULL),而不是math.h。我不明白它是如何相关的。
  2. 如果randsrand不可用,您可以自行创建一个,例如LCGMersenne twister
  3. 如果不考虑速度和安全性,可以将当前PRNG状态存储在持久性内存中,并在需要随机数时从该点重新启动。例如,MT19937的周期为2 19937 - 1,当没有重新播种时,它应该足以用于正常目的。
  4. 如果真的需要播种,任何在任何比例下都不恒定的东西都可以用作种子。

答案 1 :(得分:3)

考虑使用Mersenne Twister,来源是例如here - 比传统的线性同余发生器具有更高的质量,非常长的时期,深入研究和祝福,近期的大量学术文献。

答案 2 :(得分:0)

考虑一下观察through this讲座,可能会给你一些想法(和代码)。 pdf经历了几个不同的选项,甚至提供了一些代码。

答案 3 :(得分:0)

  

我正在尝试在嵌入式C中编写随机数生成函数,其中我不能包含math.h文件。这就是为什么我无法使用种子srand功能。

srand()通常使用time()播种,并在<time.h>中定义,而不是在<math.h>中定义。

  

除了时间之外,除了时间之外还有其他任何种子方式吗?

当然,你可以用你想要的任何东西播种。这取决于您的平台可用的内容。