1

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

除了时间,还有其他方法可以播种吗?

4

4 回答 4

3
  1. srand是在stdlib.h,不是math.h。用时间播种你包括time.h使用time(NULL),而不是math.h。我看不出它有什么关系。
  2. 如果不可用randsrand您可以自己创建一个,例如LCGMersenne twister
  3. 如果速度和安全性不是问题,您可以将当前 PRNG 状态存储在持久内存中,并在需要随机数时从该点重新启动。例如,MT19937 的周期为 2 19937 - 1,在没有重新播种的情况下,这对于正常用途来说应该足够了。
  4. 如果确实需要播种,任何在任何尺度上不恒定的东西都可以用作种子。
于 2010-03-07T06:29:53.230 回答
3

考虑使用 Mersenne Twister,例如这里的来源-质量传统的线性同余发生器高得多,周期极长,在大量最近的学术文献中进行了深入研究和祝福。

于 2010-03-07T06:30:24.673 回答
0

考虑看一看这个讲座,可能会给你一些想法(和代码)。pdf 经历了几个不同的选项,甚至给出了一些代码。

于 2010-03-07T06:34:56.100 回答
0

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

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

除了时间,还有其他方法可以播种吗?

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

于 2010-03-07T06:47:25.330 回答