URI: 
       trand.3 - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       trand.3 (3255B)
       ---
            1 .TH RAND 3
            2 .SH NAME
            3 rand, lrand, frand, nrand, lnrand, srand, truerand, ntruerand, fastrand, nfastrand \- random number generator
            4 .SH SYNOPSIS
            5 .B #include <u.h>
            6 .br
            7 .B #include <libc.h>
            8 .PP
            9 .ta \w'\fLdouble 'u
           10 .B
           11 int        rand(void)
           12 .PP
           13 .B
           14 long        lrand(void)
           15 .PP
           16 .B
           17 double        frand(void)
           18 .PP
           19 .B
           20 int        nrand(int val)
           21 .PP
           22 .B
           23 long        lnrand(long val)
           24 .PP
           25 .B
           26 void        srand(long seed)
           27 .PP
           28 .B
           29 ulong        truerand(void)
           30 .PP
           31 .B
           32 ulong        ntruerand(ulong val)
           33 .sp
           34 .B #include <mp.h>
           35 .br
           36 .B #include <libsec.h>
           37 .PP
           38 .B
           39 void        genrandom(uchar *buf, int nbytes)
           40 .PP
           41 .B
           42 void        prng(uchar *buf, int nbytes)
           43 .PP
           44 .B
           45 ulong        fastrand(void)
           46 .PP
           47 .B
           48 ulong        nfastrand(ulong val)
           49 .SH DESCRIPTION
           50 .I Rand
           51 returns a uniform pseudo-random
           52 number
           53 .IR x ,
           54 .RI 0≤ x <2\u\s715\s10\d.
           55 .PP
           56 .I Lrand
           57 returns a uniform
           58 .B long
           59 .IR x ,
           60 .RI 0≤ x <2\u\s731\s10\d.
           61 .PP
           62 .I Frand
           63 returns a uniform
           64 .B double
           65 .IR x ,
           66 .RI 0.0≤ x <1.0,
           67 This function calls
           68 .I lrand
           69 twice to generate a number with as many as 62 significant bits of mantissa.
           70 .PP
           71 .I Nrand
           72 returns a uniform integer
           73 .IR x ,
           74 .RI 0≤ x < val.
           75 .I Lnrand
           76 is the same, but returns a
           77 .BR long .
           78 .PP
           79 The algorithm is additive feedback with:
           80 .IP
           81 x[n] = (x[n\(mi273] + x[n\(mi607]) mod
           82 .if t 2\u\s731\s0\d
           83 .if n 2^31
           84 .LP
           85 giving a period of
           86 .if t 2\u\s730\s10\d \(mu (2\u\s7607\s10\d \- 1).
           87 .if n 2^30 × (2^607 - 1).
           88 .PP
           89 The generators are initialized by calling
           90 .I srand
           91 with whatever you like as argument.
           92 To get a different starting value each time,
           93 .IP
           94 .L
           95 srand(time(0))
           96 .LP
           97 will work as long as it is not called more often
           98 than once per second.
           99 Calling
          100 .IP
          101 .L
          102 srand(1)
          103 .LP
          104 will initialize the generators to their
          105 starting state.
          106 .PP
          107 .I Truerand
          108 returns a random unsigned long read from
          109 .BR /dev/random .
          110 Due to the nature of
          111 .BR /dev/random ,
          112 truerand can only return a few hundred bits a
          113 second.
          114 .PP
          115 .I Ntruerand
          116 returns a uniform random integer
          117 .IR x ,
          118 .RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
          119 .PP
          120 .I Genrandom
          121 fills a buffer with bytes from the X9.17 pseudo-random
          122 number generator.  The X9.17 generator is seeded by 24
          123 truly random bytes read from
          124 .BR /dev/random .
          125 .PP
          126 .I Prng
          127 uses the native
          128 .MR rand (3)
          129 pseudo-random number generator to fill the buffer.  Used with
          130 .IR srand ,
          131 this function can produce a reproducible stream of pseudo random
          132 numbers useful in testing.
          133 .PP
          134 Both
          135 .I genrandom
          136 and
          137 .I prng
          138 may be passed to
          139 .I mprand
          140 (see
          141 .MR mp (3) ).
          142 .PP
          143 .I Fastrand
          144 uses
          145 .I genrandom
          146 to return a uniform
          147 .B "unsigned long
          148 .IR x ,
          149 .RI 0≤ x < 2\u\s732\s10\d-1.
          150 .PP
          151 .I Nfastrand
          152 uses
          153 .I genrandom
          154 to return a uniform
          155 .B "unsigned long
          156 .IR x ,
          157 .RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
          158 .SH SOURCE
          159 .B \*9/src/lib9
          160 .br
          161 .B \*9/src/libsec/port
          162 .SH "SEE ALSO
          163 .\" .IR cons (3),
          164 .MR mp (3)
          165 .SH BUGS
          166 .I Truerand
          167 and
          168 .I ntruerand
          169 maintain a static file descriptor.
          170 .PP
          171 To avoid name conflicts with the underlying system,
          172 .IR rand ,
          173 .IR lrand ,
          174 .IR frand ,
          175 .IR nrand ,
          176 .IR lnrand ,
          177 and
          178 .I srand
          179 are preprocessor macros defined as
          180 .IR p9rand ,
          181 .IR p9lrand ,
          182 and so on;
          183 see
          184 .MR intro (3) .
          185 .ie \n(HT .ds HT "
          186 .el .ds HT " (see HTML-formatted man page for link)
          187 .PP
          188 Some versions of SunOS do not ship with
          189 .B /dev/random
          190 installed.
          191 You may have to download a
          192 .HR "http://sunsolve.sun.com/search/document.do?assetkey=1-25-27606-1" "patch from Sun\*(HT"
          193 to add it to your system.