C 中的 srand 函数
我正在尝试在嵌入式 C 中编写一个随机数生成函数,但我无法包含 math.h
文件。这就是为什么我无法使用种子 srand 函数。
除了时间之外还有什么办法可以播种吗?
I am trying to code a random number generation function in embedded C where I can't include the math.h
file. Thats why I'm not able to use the seed srand
function.
Is there any other way to seed it other than time?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
考虑使用 Mersenne Twister,来源例如 这里 -- 比传统的线性同余生成器质量高得多,周期极长,经过大量近期学术文献的深入研究和祝福。
Consider using the Mersenne Twister, sources are e.g. here -- much higher quality than traditional linear congruential generators, superbly long period, deeply studied in, and blessed by, plenty of recent academic literature.
srand
位于stdlib.h
中,而不是math.h
中。要使用时间作为种子,请包含time.h
以使用time(NULL)
,而不是math.h
。我不明白这有什么关系。rand
和srand
不可用,您可以创建自己的一个,例如 LCG 或 梅森扭曲器。srand
is instdlib.h
, notmath.h
. To seed with time you includetime.h
to usetime(NULL)
, notmath.h
. I don't see how it's relevant.rand
andsrand
are not available, you can create one your own, e.g. LCG or Mersenne twister.考虑看看通过这个讲座,可能会给你一些想法(和代码)。
该 pdf 文件介绍了几个不同的选项,甚至还提供了一些代码。
Consider having a looksee through this lecture, might give you some ideas (and code).
The pdf goes through a few different options, and even gives a bit of code.
srand()
通常使用time()
进行播种,并且在
中定义,而不是在< ;math.h>
。当然,你可以用任何你想要的东西来播种。这取决于您的平台可用的内容。
srand()
is commonly seeded usingtime()
, and that is defined in<time.h>
, not in<math.h>
.Of course, you can seed it with anything you want. It depends on your platform what is available.