gsl提供了很好的随机数生成接口,在实际的代码编写中可以利用这些接口生成指定分布的随机数,但是生成的随机数一般只是在[0,1 )之间的随机数,列如官方提供的例子代码如下:
#include "stdafx.h"
#include <gsl/gsl_rng.h>
int _tmain(int argc, _TCHAR* argv[])
{
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;
}
结果如下
当我们需要在指定的范围中生成这样的随机数,gsl没有提供直接的接口,那么我们就需要对结果做一个拉伸,修改后的代码如下:
#include "stdafx.h"
#include <gsl/gsl_rng.h>
int _tmain(int argc, _TCHAR* argv[])
{
const gsl_rng_type * T;
gsl_rng * r;
int i, n = 10;
double low = 1;
double up = 10;
gsl_rng_env_setup();
T = gsl_rng_default;
r = gsl_rng_alloc (T);
for (i = 0; i < n; i++)
{
double u = low + gsl_rng_uniform (r) * (up - low);
printf ("%.5f\n", u);
}
gsl_rng_free (r);
return 0;
}
结果如下:
这样随机数就映射到[1,10)这个区间了。