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

FreeBSD Manual Pages

  
 
  

home | help
RAND(3)		       FreeBSD 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.	Re-
     peatable sequences	of rand() output may be	obtained by calling srand()
     with the same seed.  rand() is implicitly initialized as if srand(1) had
     been invoked 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() im-
     plements 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
     random(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	re-
     moved 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	qual-
     ity output.

     These functions should not	be used	in portable applications that want a
     high quality or high performance pseudorandom number generator.  One pos-
     sible replacement,	random(3), is portable to Linux	a but it is not	espe-
     cially 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	SplitMix64 algorithm implementations may be embedded in	your applica-
     tion.  These algorithms have the benefit of requiring less	space than
     random(3) and being quite fast (in	header inline implementations).

FreeBSD	13.0		       February	1, 2020			  FreeBSD 13.0

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | IMPLEMENTATION NOTES | SEE ALSO | STANDARDS | CAVEATS

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

home | help