5

我正在寻找与 Windows 上的 drand48 等效的版本。对于所有不知道的人,以下内容并不等同:

(double)rand()/RAND_MAX;

首先, rand 返回的值包括 RAND_MAX 其次,在 Windows RAND_MAX=32767 上,这对我的应用程序来说太短了。

我的目的是为模拟产生噪音。最好使用与 drand48 具有相同周期的伪随机生成器。

4

3 回答 3

7

首先,请注意,您似乎将决议与期间混淆了。在 Windows 上,rand 将返回 0 到 32767 之间的值,但这并不意味着每次调用 32768 次都会重复相同的值。所以 rand 应该是完全足够的,除非你需要超过 16 位的分辨率。(分辨率和周期在 drand48 中是相同的,但不是在所有伪随机数生成器中。)

如果您不需要 drand48 的确切行为,rand_s将是最简单的选择。它具有 32 位分辨率,低于 drand48,但足以满足大多数用途。它生成一个密码安全的随机数,因此没有固定的周期。一个可能的问题是它会比 drand48 慢得多。

如果您想要 drand48 的相同行为,该算法已记录在案并且应该易于重新实现,或者您可以使用来自 FreeBSD 的源代码(链接到http://fxr.watson.org/上的源代码浏览器)。

于 2012-06-17T00:56:37.067 回答
3

晚会晚了 7 年。对不起。

Gnu Scientific Library 很好地解决了这个问题。该库采用了几种高质量的生成算法。

https://www.gnu.org/software/gsl/doc/html/rng.html

于 2019-01-09T01:24:30.110 回答
0

它可能不是您问题的确切答案,但它仍然是一个解决方案。使用CryptGenRandom(它是 WinAPI 的形式)。

于 2012-06-16T18:11:53.820 回答