GSL 统一随机数生成器

5 random

我想使用 GSL 的均匀随机数生成器。在他们的网站上,他们包含以下示例代码:

 #include <stdio.h>
 #include <gsl/gsl_rng.h>

 int
 main (void)
 {
   const gsl_rng_type * T;
   gsl_rng * r;

   int i, n = 10;

   gsl_rng_env_setup();

   T = gsl_rng_default;
   r = gsl_rng_alloc (T);

   for (i = 0; i < n; i++) 
     {
       double u = gsl_rng_uniform (r);
       printf ("%.5f\n", u);
     }

   gsl_rng_free (r);

   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

然而,这不依赖于任何种子,因此每次都会产生相同的随机数。

他们还指定了以下内容:

生成器本身可以使用环境变量 GSL_RNG_TYPE 进行更改。这是使用种子值 123 和多重递归生成器 mrg 的程序的输出,

 $ GSL_RNG_SEED=123 GSL_RNG_TYPE=mrg ./a.out
Run Code Online (Sandbox Code Playgroud)

但我不明白如何实现这一点。关于我可以对上述代码进行哪些修改以合并种子,有什么想法吗?

Car*_*000 3

阅读18.6 随机数环境变量来了解该gsl_rng_env_setup()函数正在做什么。它从环境变量中获取生成器类型和种子。

然后参见18.3 随机数生成器初始化- 如果您不想从环境变量中获取种子,可以使用gsl_rng_set()来设置种子。