home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / c / rand < prev    next >
Text File  |  1994-03-08  |  2KB  |  105 lines

  1. #ifdef __STDC__
  2. static char sccs_id[] = "@(#) rand.c 1.1 " __DATE__ " HJR";
  3. #else
  4. static char sccs_id[] = "@(#) rand.c 1.1 26/9/90 HJR";
  5. #endif
  6.  
  7. /* rand.c (c) Copyright 1990 H.Rogers */
  8.  
  9. #include <stdlib.h>
  10.  
  11. static unsigned long __state[32] =
  12. {
  13.   0x6fdb9cb7, 0x9de8dc3d, 0x093bf9e4, 0x47528c2b, 0xfc263867, 0x53cbf1bf,
  14.   0x13618c92, 0x9e0f31b1, 0xcd651ab0, 0x2b52a7e5, 0x2ccdd9bf, 0x30052e2e,
  15.   0xb278be81, 0xd634a58b, 0x0a33d2c1, 0xfd42f052, 0xcb2f06f8, 0xa57bb730,
  16.   0x4ca963ac, 0x84bf5532, 0xd67ab9e6, 0x6e2d017b, 0x1e17cd99, 0x5891173a,
  17.   0x39384a29, 0xe0a0282e, 0x2e5512fc, 0x3093f269, 0x3a6983e6, 0x6b9fdaf3,
  18.   0x38b6bbd1, 0xb5e23046
  19. };
  20. static int __st1 = 0, __st2 = 3;
  21.  
  22. #ifdef __STDC__
  23. void
  24. srand (register long seed)
  25. #else
  26. void
  27. srand (seed)
  28.      register long seed;
  29. #endif
  30. {
  31.   register int i;
  32.  
  33.   for (i = 0; i < 32; i++)
  34.     seed = __state[i] = (seed * 1103515245 + 12345);
  35.   __st1 = 0;
  36.   __st2 = 3;
  37.   for (i = 0; i < ((lrand () ^ seed) & 255); i++);
  38.   for (i = 0; i < ((lrand () ^ seed) & 255); i++)
  39.     lrand ();
  40. }
  41.  
  42. #ifdef __STDC__
  43. long
  44. lrand (void)
  45. #else
  46. long
  47. lrand ()
  48. #endif
  49. {
  50.   register long i, j;
  51.   register int k, l;
  52.  
  53.   i = *((long *) (__state + (k = __st1)));
  54.   j = *((long *) (__state + (l = __st2)));
  55.   if (i < 0 && j < 0)
  56.     i = -i;
  57.   __state[l] = (i += j);
  58.   __st1 = (k + 1) & 31;
  59.   __st2 = (l + 1) & 31;
  60.   return ((i >> 1) & RAND_MAX);
  61. }
  62. #ifdef __STDC__
  63. int (rand) (void)
  64. #else
  65. int (rand) ()
  66. #endif
  67. {
  68.   return (rand ());
  69. }
  70.  
  71. #ifdef __STDC__
  72. void (srand48) (register long seed)
  73. #else
  74. void (srand48) (seed)
  75.      register long seed;
  76. #endif
  77. {
  78.   srand48 (seed);
  79. }
  80. #ifdef __STDC__
  81. long (lrand48) (void)
  82. #else
  83. long (lrand48) ()
  84. #endif
  85. {
  86.   return (lrand48 ());
  87. }
  88. #ifdef __STDC__
  89. void (srandom) (register long seed)
  90. #else
  91. void (srandom) (seed)
  92.      register long seed;
  93. #endif
  94. {
  95.   srandom (seed);
  96. }
  97. #ifdef __STDC__
  98. long (random) (void)
  99. #else
  100. long (random) ()
  101. #endif
  102. {
  103.   return (random ());
  104. }
  105.