RockCarry 发表于 2007-1-11 14:10

[分享]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) &amp; 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>

hjj1123 发表于 2007-1-12 22:36

<P>不错 其实TC2.0用记事本打开有好多东西可以看到</P>

页: [1]

编程论坛