DRAND48 - Linux手册页
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)。
Interface | Attribute | Value |
drand48(),erand48(),lrand48(),nrand48(),mrand48(),jrand48(),srand48(),seed48(),lcong48() | Thread safety | MT-Unsafe race:drand48 |
上面的函数记录了随机数生成器的全局状态信息,因此它们不是线程安全的。
遵循规范
POSIX.1-2001,POSIX.1-2008,SVr4。
另外参见
rand(3),随机(3)
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。