rand.c
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 2k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /***
  2. *rand.c - random number generator
  3. *
  4. *       Copyright (c) 1985-1993, Microsoft Corporation. All rights reserved.
  5. *
  6. *Purpose:
  7. *       defines rand(), srand() - random number generator
  8. *
  9. *******************************************************************************/
  10. #include <cruntime.h>
  11. #include <stddef.h>
  12. #include <stdlib.h>
  13. #ifdef _MTRAND
  14. #undef _MTRAND
  15. #endif
  16. #ifndef _MTRAND
  17. static long holdrand = 1L;
  18. #endif  /* _MTRAND */
  19. /***
  20. *void srand(seed) - seed the random number generator
  21. *
  22. *Purpose:
  23. *       Seeds the random number generator with the int given.  Adapted from the
  24. *       BASIC random number generator.
  25. *
  26. *Entry:
  27. *       unsigned seed - seed to seed rand # generator with
  28. *
  29. *Exit:
  30. *       None.
  31. *
  32. *Exceptions:
  33. *
  34. *******************************************************************************/
  35. void __cdecl srand (
  36.         unsigned int seed
  37.         )
  38. {
  39. #ifdef _MTRAND
  40.         _getptd()->_holdrand = (unsigned long)seed;
  41. #else  /* _MTRAND */
  42.         holdrand = (long)seed;
  43. #endif  /* _MTRAND */
  44. }
  45. /***
  46. *int rand() - returns a random number
  47. *
  48. *Purpose:
  49. *       returns a pseudo-random number 0 through 32767.
  50. *
  51. *Entry:
  52. *       None.
  53. *
  54. *Exit:
  55. *       Returns a pseudo-random number 0 through 32767.
  56. *
  57. *Exceptions:
  58. *
  59. *******************************************************************************/
  60. int __cdecl rand (
  61.         void
  62.         )
  63. {
  64. #ifdef _MTRAND
  65.         _ptiddata ptd = _getptd();
  66.         return( ((ptd->_holdrand = ptd->_holdrand * 214013L
  67.             + 2531011L) >> 16) & 0x7fff );
  68. #else  /* _MTRAND */
  69.         return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
  70. #endif  /* _MTRAND */
  71. }