人生的意义就是思考其意义分享 http://blog.sciencenet.cn/u/qianlivan 天体物理工作者,家乡云南昆明。

博文

C/C++语言学习笔记(四)gsl的随机数产生

已有 9692 次阅读 2011-7-22 16:26 |个人分类:知识|系统分类:科研笔记| C语言

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 拟合分子云核(四)
收藏 IP: 159.226.169.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-7-17 16:29

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部