Windows上的drand48

时间:2012-06-16 18:07:06

标签: windows random posix

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

(double)rand()/RAND_MAX;

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

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

3 个答案:

答案 0 :(得分:6)

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

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

如果你想要drand48的相同行为,algorithm is documented并且应该很容易重新实现,或者你可以使用source code from FreeBSD(链接到http://fxr.watson.org/上的源代码浏览器)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

参加聚会晚了7年。抱歉。

Gnu科学图书馆是解决此问题的好方法。该库采用了几种高质量的生成算法。

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