DRAND48 - Linux手册页

时间:2019-08-20 18:00:49  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

drand48,erand48,lrand48,nrand48,mrand48,jrand48,srand48,seed48,lcong48-生成均匀分布的伪随机数

语法

#include <stdlib.h>

double drand48(void);

double erand48(unsigned short xsubi[3]);

long int lrand48(void);

long int nrand48(unsigned short xsubi[3]);

long int mrand48(void);

long int jrand48(unsigned short xsubi[3]);

void srand48(long int seedval);

unsigned short *seed48(unsigned short seed16v[3]);

void lcong48(unsigned short param[7]);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

上面显示的所有功能:_XOPEN_SOURCE
|| / * Glibc自2.19起:* / -_DEFAULT_SOURCE
|| / * Glibc版本

说明

这些函数使用线性同余算法和48位整数算法生成伪随机数。

drand48()和erand48()函数返回非负双精度浮点值,该值均匀分布在间隔[0.0,1.0)上。

lrand48()和nrand48()函数返回均匀分布在[0,2 ^ 31)区间内的非负长整数。

mrand48()和jrand48()函数返回在间隔[-2 ^ 31,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

通过首先生成序列中的下一个48位Xi,可以计算出drand48(),erand48(),lrand48(),nrand48(),mrand48()或jrand48()中任何一个函数返回的值。然后,根据要返回的数据项的类型,从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的标准值。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
drand48(),erand48(),lrand48(),nrand48(),mrand48(),jrand48(),srand48(),seed48(),lcong48()Thread safetyMT-Unsafe race:drand48

上面的函数记录了随机数生成器的全局状态信息,因此它们不是线程安全的。

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4。

另外参见

rand(3),随机(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/