我正在寻找与Windows上的drand48相当的东西。对于所有不知道的人,以下内容并不等同:
(double)rand()/RAND_MAX;
首先,rand返回包括RAND_MAX的值 其次,在Windows RAND_MAX = 32767上,这对我的应用来说太短了。
我的目的是为模拟生成噪音。希望使用与drand48具有相同周期的伪随机生成器。
答案 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)
Gnu科学图书馆是解决此问题的好方法。该库采用了几种高质量的生成算法。