gsl中产生均匀分布的随机数的函数为
unsigned long int gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n)
也就是给一个随机数种子和数组的大小,然后就可以产生一个指定大小的随机数数组,分布为均匀分布。
关于gsl_rng,以下是头文件gsl_rng.h中相关的代码
typedef struct
{
const char *name;
unsigned long int max;
unsigned long int min;
size_t size;
void (*set) (
void *state,
unsigned long int seed);
unsigned long int (*get) (
void *state);
double (*get_double) (
void *state);
}
gsl_rng_type;
typedef struct
{
const gsl_rng_type * type;
void *state;
}
gsl_rng;
这些定义好像是模板。我正在读的那个程序里,随机数发生器只有两行代码
rng=gsl_rng_alloc(gsl_rng_ranlux);
gsl_rng_set(rng,time(NULL));
搜索了一下发现ranlux.c里有一行
const gsl_rng_type *gsl_rng_ranlux=&ranlux_type;
而ranlux_type的定义为
static const gsl_rng_type ranlux_type =
{"ranlux",
0x00ffffffUL,
0,
sizeof (ranlux_state_t),
&ranlux_set,
&ranlux_get,
&ranlux_get_double};
而ranlux_get_double的定义为
static double
ranlux_get_double (void *vstate)
{
return ranlux_get (vstate) / 16777216.0;
}
到这里,就清楚多了。再去查看ranlux_get就可以了。
https://blog.sciencenet.cn/blog-117333-467295.html
上一篇:
C/C++语言学习笔记(三)几个标准库中的类型下一篇:
CUPID FINDCLUMPS 拟合分子云核(四)