【问题标题】:Will rand() and time() function cost a lot system resource?rand() 和 time() 函数会消耗大量系统资源吗?
【发布时间】:2013-07-20 07:33:06
【问题描述】:

我在我的程序中使用了 C++ rand() 函数,但是我发现在循环中使用 rand() 后运行它时我的程序会很慢。循环会重复多次,并将调用函数time() 作为rand() 的种子。

所以我想知道 C++ rand()time() 函数是否会占用大量系统资源?

【问题讨论】:

  • 你就不能测量一下吗?
  • 这取决于实施,以及您认为“很多”的内容。
  • 通常只需要播种一次。
  • 计算负载很大程度上取决于使用的随机引擎类型:stackoverflow.com/questions/16536617/random-engine-differences/…
  • 有不同的实现取决于谁编写了你的​​标准库。而且多次调用srand(time(NULL))实际上比调用一次更糟糕,并且可能导致重复的值序列。

标签: c++ random


【解决方案1】:

两件事:

1 - 您提到您在每次循环迭代时为 rand() 播种:这不仅不需要,因为可能会降低您的 PRNG(统计性能)的性能,因为它们被设计为由先前的输出播种。只播种一次 PRNG,然后(仅)调用 rand()。它会在每次调用时自动更新种子。

2 - rand() 确实很慢。根据您的统计要求,如果不是很严格,您可以重新实现一个 rand() 函数。可以从logistic map 制作一个简单的 PRNG。

祝你好运!

【讨论】:

  • 感谢您的回答!我想知道是否有任何轻量级的rand() 或任何我可以直接调用的库。我没有时间使用您建议的逻辑图自己实现一个。
  • 如果您想要一个简单的算法,Tausworthe 生成器使用一系列位移、异或和按位与,因此它们往往相对较快。
  • 很酷,但是 time() 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多