Windows上的drand48

use*_*329 3 windows random posix

我正在寻找相当于Windows上的drand48.对于所有不知道的人,以下不等同于:

(double)rand()/RAND_MAX;
Run Code Online (Sandbox Code Playgroud)

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

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

Har*_*ton 7

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

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

如果你想要与drand48相同的行为,那么算法就会被记录下来并且应该很容易重新实现,或者你可以使用FreeBSD源代码(链接到http://fxr.watson.org/上的源代码浏览器).

  • 这是我的实现(也基于FreeBSD):https://gist.github.com/mortennobel/8665258 (2认同)