random.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:3k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * random.h
  3.  *
  4.  * Mersenne Twister random number generator.
  5.  * From Makoto Matsumoto and Takuji Nishimura.
  6.  *
  7.  * Portable Windows Library
  8.  *
  9.  * Copyright (c) 1993-2000 Equivalence Pty. Ltd.
  10.  *
  11.  * The contents of this file are subject to the Mozilla Public License
  12.  * Version 1.0 (the "License"); you may not use this file except in
  13.  * compliance with the License. You may obtain a copy of the License at
  14.  * http://www.mozilla.org/MPL/
  15.  *
  16.  * Software distributed under the License is distributed on an "AS IS"
  17.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  18.  * the License for the specific language governing rights and limitations
  19.  * under the License.
  20.  *
  21.  * The Original Code is Portable Windows Library.
  22.  *
  23.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  24.  *
  25.  * Contributor(s): ______________________________________.
  26.  *
  27.  * $Log: random.h,v $
  28.  * Revision 1.1  2000/02/17 12:05:02  robertj
  29.  * Added better random number generator after finding major flaws in MSVCRT version.
  30.  *
  31.  */
  32. #ifndef _PRANDOM
  33. #define _PRANDOM
  34. #ifdef __GNUC__
  35. #pragma interface
  36. #endif
  37. /**Mersenne Twister random number generator.
  38.    An application would create a static instance of this class, and then use
  39.    if to generate a sequence of psuedo-random numbers.
  40.    Usually an application would simply use PRandom::Number() but if
  41.    performance is an issue then it could also create a static local variable
  42.    such as:
  43.         {
  44.           static PRandom rand;
  45.           for (i = 0; i < 10000; i++)
  46.              array[i] = rand;
  47.         }
  48.     This method is not thread safe, so it is the applications responsibility
  49.     to assure that its calls are single threaded.
  50.   */
  51. class PRandom
  52. {
  53.   public:
  54.     /**Construct the random number generator.
  55.        This version will seed the random number generator with a value based
  56.        on the system time as returned by time() and clock().
  57.       */
  58.     PRandom();
  59.     /**Construct the random number generator.
  60.        This version allows the application to choose the seed, thus letting it
  61.        get the same sequence of values on each run. Useful for debugging.
  62.       */
  63.     PRandom(
  64.       DWORD seed    /// New seed value, must not be zero
  65.     );
  66.     /**Set the seed for the random number generator.
  67.       */
  68.     void SetSeed(
  69.       DWORD seed    /// New seed value, must not be zero
  70.     );
  71.     /**Get the next psuedo-random number in sequence.
  72.        This generates one pseudorandom unsigned integer (32bit) which is
  73.        uniformly distributed among 0 to 2^32-1 for each call.
  74.       */
  75.     unsigned Generate();
  76.     /**Get the next psuedo-random number in sequence.
  77.       */
  78.     inline operator unsigned() { return Generate(); }
  79.     /**Get the next psuedo-random number in sequence.
  80.        This utilises a single system wide thread safe PRandom variable. All
  81.        threads etc will share the same psuedo-random sequence.
  82.       */
  83.     static unsigned Number();
  84.   protected:
  85.     enum { N = 624 };     /* cycle size */
  86.     unsigned long mt[N];  /* the array for the state vector  */
  87.     int mti;
  88. };
  89. #endif  // _PRANDOM
  90. // End Of File ///////////////////////////////////////////////////////////////