随机数

随机数

利用以下函数,您可以使用一个可移植、快速的优质伪随机数生成器 (PRNG)。

请勿将此 API 用于加密目的,例如密钥生成、随机数、盐或一次性填料。

PRNG 适用于非加密使用,例如在游戏中(洗牌、生成关卡)、生成测试套件数据等。如果您需要加密用途的随机数据,建议使用平台特定的 API,例如 UNIX 上的 /dev/random 或 Windows 上的 CryptGenRandom()

GRand 使用梅森旋转 PRNG,由 Makoto Matsumoto 和 Takuji Nishimura 最初开发。更多信息,请参见 此页面

如果您只需要一个随机数,只需调用 g_random_*() 函数,它将创建一个全局使用的 GRand,并在内部使用相应的 g_rand_*() 函数

任何时候,当您需要一个可重现的随机数流,最好自己创建一个 GRand 并直接使用 g_rand_*() 函数,这也将稍快一些。使用某个种子初始化 GRand 将在所有平台上生成完全相同的系列随机数。因此,这可以作为例如游戏的种子。

g_rand*_range() 函数将返回高质量的随机分配,例如 (g_random_int () % max) 方法通常不会产生均等分布的数字。

GLib 为 GRand 使用的伪随机数生成器梅森旋转更改了种子算法。这是必要的,因为某些种子会产生非常糟糕的伪随机流。另外 g_rand*_int_range() 生成的伪随机整数在 GLib 新版本中将具有稍微更好的均等分布。

GLib 2.0.x 中发现的原始种子和生成算法可用作新算法的替代,方法是将环境变量 G_RANDOM_VERSION 设置为 2.0。仅在您需要精确重现使用 Glib-2.0 生成的一系列数字时,才使用 GLib-2.0 算法。