drand48函数用法详解
drand48函数简介
- 头文件包含
#include <stdlib.h>
- 函数定义
double drand48(void);
double erand48(unsigned short xsubi [3]);
long lrand48(void);
long nrand48(unsigned short xsubi [3]);
long mrand48(void);
long jrand48(unsigned short xsubi [3]);
void srand48(long seedval );
unsigned short *seed48(unsigned short seed16v [3]);
void lcong48(unsigned short param [7]);
drand48函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘drand48’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <stdlib.h>
drand48函数详细描述
这些函数使用线性同余算法和48位整数算法生成伪随机数。
drand48 ()和erand48 ()函数返回非负双精度浮点值,均匀分布在区间[0.0,\1.0)上。
lrand48 ()和nrand48 ()函数返回均匀分布在区间[0,\231)上的非负长整数。
mrand48 ()和jrand48 ()函数返回均匀分布在区间[\231,\2^31)上的有符号长整数。
srand48 () seed48 ()和lcong48 ()函数是初始化函数,在使用drand48 () lrand48 ()或mrand48 ()之前应该调用其中一个函数。函数erand48 () nrand48 ()和jrand48 ()不需要首先调用初始化函数。
所有函数都是通过根据线性同余式生成一个48位整数序列Xi 来工作的:
Xn+1 = (aXn + c) mod m, where n >= 0
参数m=2^48,因此执行48位整数算术。除非调用lcong48 (),否则a和c由:
a = 0x5DEECE66D
c = 0xB
任何函数drand48 ()、erand48 ()、lrand48 ()、nrand48 ()、mrand48 ()或jrand48 ()返回的值都是通过首先生成序列中的下一个48位Xi来计算的。然后,根据要返回的数据项的类型,从Xi的高阶位复制适当的位数并转换为返回值。
函数drand48 ()、lrand48 ()和mrand48 ()将生成的最后48位Xi存储在内部缓冲区中。函数erand48 ()、nrand48 ()和jrand48 ()要求调用程序在数组参数xsubi 中为连续的Xi值提供存储。在第一次调用函数之前,通过将Xi的初始值放入数组来初始化函数。
初始化器函数srand48 ()将Xi的高阶32位设置为参数seedval ,低阶16位设置为任意值0x330e。
初始化器函数seed48 ()将Xi的值设置为数组参数seed16v 中指定的48位值,Xi的前一个值被复制到一个内部缓冲区中,seed48 ()返回一个指向该缓冲区的指针
初始化函数lcong48 ()允许用户为Xi a 和c 数组参数元素指定初始值param[0-2]指定Xi param[3-5]指定a 和param[6]指定c 。在调用了lcong48 ()之后,随后对srand48 ()或seed48 ()的调用将恢复a和c 的标准值
评论区