drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - generate uniformly distributed pseudo-random numbers

#include<stdlib.h>doubledrand48(void);doubleerand48(unsignedshortintxsubi[3]);longintlrand48(void);longintnrand48(unsignedshortintxsubi[3]);longintmrand48(void);longintjrand48(unsignedshortintxsubi[3]);voidsrand48(longintseedval));unsignedshortint*seed48(unsignedshortintseed16v[3]);voidlcong48(unsignedshortintparam[7]);

These functions generate pseudo-random numbers using the linear congruential algorithm and 48-bit integer arithmetic. Thedrand48()anderand48()functions return non-negative double-precision floating-point values uniformly distributed between [0.0, 1.0). Thelrand48()andnrand48()functions return non-negative long integers uniformly distributed between 0 and 2^31. Themrand48()andjrand48()functions return signed long integers uniformly distributed between -2^31 and 2^31. Thesrand48(),seed48()andlcong48()functions are initial- ization functions, one of which should be called before usingdrand48(),lrand48()ormrand49(). The functionserand48(),nrand48()andjrand48()do not require an ini- tialization function to be called first. All the functions work by generating a sequence of 48-bit integers,Xi, according to the linear congruential formula:Xn+1=(aXn+c)modThe parameterm= 2^48, hence 48-bit integer arithmetic is performed. Unlesslcong48()is called,aandcare given by:a=0x5DEECE66Dc=0xBThe value returned by any of the functionsdrand48(),erand48(),lrand48(),nrand48(),mrand48()orjrand48()is computed by first generating the next 48-bitXiin the sequence. Then the appropriate number of bits, according to the type of data item to be returned, is copied from the high-order bits ofXiand transformed into the returned value. The functionsdrand48(),lrand48()andmrand48()store the last 48-bitXigenerated in an internal buffer. The func- tionserand48(),nrand48()andjrand48()require the calling program to provide storage for the successiveXivalues in the array argumentxsubi. The functions are initialized by placing the initial value ofXiinto the array before cal- ling the function for the first time. The initializer functionsrand48()sets the high order 32- bits ofXito the argumentseedval. The low order 16-bits are set to the arbitrary value 0x330E. The initializer functionseed48()sets the value ofXito the 48-bit value specified in the array argumentseed16v. The previous value ofXiis copied into an internal buffer and a pointer to this buffer is returned byseed48(). The initialization functionlcong48()allows the user to specify initial values forXi,aandc. Array argument ele- mentsparam[0-2] specifyXi,param[3-5] specifya, andparam[6] specifiesc. Afterlcong48()has been called, a subsequent call to eithersrand48()orseed48()will restore the standard values ofaandc.

SVID 3

These functions are declared obsolete by SVID 3, which states that rand(3) should be used instead.

rand(3),random(3)