這個東西,對於數學上的分析我看明白了90%.但並未做深入研究.這個代碼是抄來的,核心部分是抄來的.感覺不錯.
產生固定的隨機數序列,只要種子一樣的話.這個隨機數產生器比較透明,而且較容易改動.很不錯.
每次實現代碼的時候,都會發現很多問題.而且,一旦寫上了代碼,時光就飛逝了...很不錯.
好吧,帖出來吧.又是來網吧,又是邊下電影邊寫Blog,呵呵.很不錯.
/*10-35-11-02-08-20.11.c -- 第十章第三十五題*/<br />#include <stdio.h></p><p>#define FALSE (0)<br />#define TRUE (1)<br />#define A (48271L)<br />#define M (2147486647L)<br />#define Q (M / A)<br />#define R (M % A)</p><p>unsigned long int Seed ;</p><p>int main (void) ;<br />int eatEnter (void) ;<br />void initialize (unsigned long int initial_value) ;<br />double random (void) ;</p><p>int main (void)<br />{<br />unsigned long int initial_value ;<br />char ch ;</p><p>printf ("Please input a initial value (>= 0, enter 'q' to quit.):") ;<br />while (scanf ("%lu", &initial_value) != 0)<br />{<br />printf ("Initial value has been initialized is : %lu/n", initial_value) ;<br />eatEnter () ;<br />initialize (initial_value) ;<br />puts ("Enter 'q' to input a new initial value and enter any key else to generate a random value again.") ;<br />while ((ch = getchar ()) != 'q')<br />{<br />if (TRUE == eatEnter ())<br />break ;<br />printf ("It is %lf./n", random ()) ;<br />}<br />printf ("Please input a initial value (>= 0, enter 'q' to quit.):") ;<br />}</p><p>return 0 ;<br />}</p><p>int eatEnter (void)<br />{<br />if ('q' == getchar ())<br />return TRUE ;<br />else<br />return FALSE ;<br />}</p><p>void initialize (unsigned long int initial_value)<br />{<br />Seed = initial_value ;<br />}</p><p>double random (void)<br />{<br />unsigned long int temp_seed ;</p><p>temp_seed = A * (Seed % Q) - R * (Seed / Q) ;<br />if (temp_seed >= 0)<br />Seed = temp_seed ;<br />else<br />Seed = temp_seed + M ;</p><p>return (double) Seed / M ;<br />}