[分享]How Computers Generate Random Numbers
<P>How Computers Generate Random Numbers <BR>Source Code:<BR>rand.h</P><DIV class=htmlcode>
<P>#ifndef _RAND_H_<BR>#define _RAND_H_</P>
<P>// 函数声明<BR>int rand(void);<BR>void srand(unsigned int seed);</P>
<P>#endif</P></DIV>
<P><BR>rand.c</P>
<DIV class=htmlcode>
<P>// 包含头文件<BR>#include "rand.h"</P>
<P>// 内部全局变量定义<BR>static unsigned long int next = 1;</P>
<P>// 产生随机数,范围为[0, 0x7FFFFFFF]<BR>int rand(void)<BR>{<BR> #define RAND_A 1103515245<BR> #define RAND_C 12345<BR> #define RAND_M 0x7FFFFFFF<BR> // SEED = (A * SEED + C) mod M;<BR> // rand = f(SEED);<BR> // 1) C is relatively prime to M; <BR> // 2) B = (A - 1) is a multiple of P, for every prime P dividing M; <BR> // 3) B = (A - 1) is a multiple of 4, if M is a multiple of 4. <BR> // Example:<BR> // 1) A = 69069, C = 1, M = 2**32, Used by VMS FORTRAN, VMS BASIC, and others<BR> // 2) A = 65539, C = 0, M = 2**31, Obsolete but still found on some systems<BR> // 3) A = 1103515245, C = 12345, M = 2**15 or 2**31, Used by C and ANSI C<BR> // 4) A = 214013, C = 2531011, M = 2**31, Used by Microsoft C<BR> // 5) A = 134775813, C = 1, M = 2**32, Used by Turbo Pascal<BR> next = (RAND_A * next + RAND_C) & RAND_M;<BR> return (int)next;<BR>}</P>
<P>// 置随机数种子<BR>void srand(unsigned int seed)<BR>{<BR> next = seed;<BR>}<BR></P></DIV>
<P><BR>Reference:<BR><a href="http://members.cox.net/srice1/random/random1.html" target="_blank" >http://members.cox.net/srice1/random/random1.html</A><BR><BR><BR>RockCarry<BR><BR></P>
页:
[1]
