Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
RAND(3) 		     Library Functions Manual			 RAND(3)

NAME
     rand, srand, rand_r -- bad random number generator

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <stdlib.h>

     void
     srand(unsigned seed);

     int
     rand(void);

     int
     rand_r(unsigned *ctx);

DESCRIPTION
     The  functions  described in this manual page are not cryptographically se-
     cure.  Applications which require unpredictable random numbers  should  use
     arc4random(3) instead.

     The  rand()  function  computes a sequence of pseudo-random integers in the
     range of 0 to RAND_MAX, inclusive.

     The srand() function seeds the algorithm with the seed parameter.	 Repeat-
     able sequences of rand() output may be obtained by calling srand() with the
     same  seed.   rand()  is implicitly initialized as if srand(1) had been in-
     voked explicitly.

     In FreeBSD 13, rand() is implemented using the  same  128-byte  state  LFSR
     generator algorithm as random(3).	However, the legacy rand_r() function is
     not  (and	can  not be, because of its limited *ctx size).  rand_r() imple-
     ments the historical, poor-quality Park-Miller 32-bit LCG and should not be
     used in new designs.

IMPLEMENTATION NOTES
     Since FreeBSD 13, rand() is implemented with the  same  generator	as  ran-
     dom(3),  so the low-order bits should no longer be significantly worse than
     the high-order bits.

SEE ALSO
     arc4random(3), random(3), random(4)

STANDARDS
     The rand() and srand() functions conform to ISO/IEC 9899:1990 ("ISO C90").

     The rand_r() function is not part of ISO/IEC 9899:1990 ("ISO C90")  and  is
     marked  obsolescent in IEEE Std 1003.1-2008 ("POSIX.1").  It may be removed
     in a future revision of POSIX.

CAVEATS
     Prior to FreeBSD 13, rand() used the historical Park-Miller generator  with
     32  bits of state and produced poor quality output, especially in the lower
     bits.  rand() in earlier versions of FreeBSD, as well as  other  standards-
     conforming implementations, may continue to produce poor quality output.

     These  functions  should  not  be used in portable applications that want a
     high quality or high performance pseudorandom number generator.  One possi-
     ble replacement, random(3), is portable to Linux a but it is not especially
     fast, nor standardized.

     If broader portability or better performance is desired, any of the  widely
     available and permissively licensed SFC64/32, JSF64/32, PCG64/32, or Split-
     Mix64 algorithm implementations may be embedded in your application.  These
     algorithms  have the benefit of requiring less space than random(3) and be-
     ing quite fast (in header inline implementations).

FreeBSD 15.1			February 1, 2020			 RAND(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=rand&sektion=3&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help