C 中的 srand 函数

发布于 2024-08-24 07:38:05 字数 112 浏览 2 评论 0原文

我正在尝试在嵌入式 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我恋#小黄人 2024-08-31 07:38:05

考虑使用 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.

世俗缘 2024-08-31 07:38:05
  1. srand 位于 stdlib.h 中,而不是 math.h 中。要使用时间作为种子,请包含 time.h 以使用 time(NULL),而不是 math.h。我不明白这有什么关系。
  2. 如果 randsrand 不可用,您可以创建自己的一个,例如 LCG梅森扭曲器
  3. 如果速度和安全性不是问题,您可以将当前的 PRNG 状态存储在持久内存中,并在需要随机数时从该点重新启动。例如,MT19937 的周期为 219937 - 1,在不重新播种的情况下应该足以满足正常目的。
  4. 如果确实需要播种,则任何尺度上不恒定的任何东西都可以用作种子。
  1. srand is in stdlib.h, not math.h. To seed with time you include time.h to use time(NULL), not math.h. I don't see how it's relevant.
  2. If rand and srand are not available, you can create one your own, e.g. LCG or Mersenne twister.
  3. If speed and security is not a concern, you can store the current PRNG state in persistent memory and restart from that point when a random number is required. For instance, MT19937 has period of 219937 - 1 which should be enough for normal purpose when without reseeding.
  4. If seeding is really required, anything that is not constant in any scales can be used as the seed.
凉墨 2024-08-31 07:38:05

考虑看看通过这个讲座,可能会给你一些想法(和代码)。
该 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.

刘备忘录 2024-08-31 07:38:05

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

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

除了时间之外还有其他方法播种吗?

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

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.

srand() is commonly seeded using time(), and that is defined in <time.h>, not in <math.h>.

Is there any other way to seed it other than time?

Of course, you can seed it with anything you want. It depends on your platform what is available.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文