random.h
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:4k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  random.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef LEDA_RANDOM_H
  12. #define LEDA_RANDOM_H
  13. //------------------------------------------------------------------------------
  14. // random numbers
  15. //------------------------------------------------------------------------------
  16. #include <LEDA/basic.h>
  17. /*{Manpage {random_source} {} {Random Sources} }*/
  18. class random_source {
  19. /*{Mdefinition 
  20. An instance of type name is a random source. It allows to generate
  21. uniformly distributed random bits, characters, integers, and doubles.
  22. It can be in  either of two modes: In bit mode it generates a random bit string
  23. of some given length $p$ ($1 le p le 31$) and in integer mode it generates a random
  24. integer in some given range $[ low .. high]$  ($low le high < low + 2^{31}$). The mode can be changed any time, either globally or for a single operation. The output of the random
  25. source can be converted to a number of formats (using standard conversions).}*/
  26.   unsigned long pat;
  27.   int low;
  28.   int diff;
  29.   bool bit_mode;
  30. public:
  31. /*{Mcreation S }*/
  32. random_source();
  33. /*{Mcreate  creates an instance var of type name , 
  34.              puts it into bit mode, and 
  35.              sets the precision to 31. }*/
  36. random_source(int p);
  37. /*{Mcreate  creates an instance var of type name , 
  38.              puts it into bit mode, and 
  39.              sets the precision to $p$ ($1 le p le 31$). }*/
  40. random_source(int low, int high);
  41. /*{Mcreate  creates an instance var of type name , 
  42.              puts it into integer mode, and 
  43.              sets the range to $[ low .. high]$. }*/
  44. /*{Moperations 3.2 5 }*/
  45. void set_seed(int s);
  46. /*{Mop         resets the seed of the random number generator to $s$. }*/
  47. void set_range(int low, int high);
  48. /*{Mopl        sets the mode to integer mode and 
  49.                 changes the range to $[ low .. high]$. }*/
  50. void set_precision(int p);
  51. /*{Mop         sets the mode to bit mode and
  52.                 changes the precision to $p$ bits. }*/
  53. // extract random numbers with precision or range specified in constructor
  54. random_source& operator>>(char& x);
  55. /*{Mbinop      extracts a character $x$ of default precision or range
  56.                 and returns var, i.e., it first generates an unsigned
  57.                 integer of the desired precision or in the desired range
  58.                 and then converts it to a character (by standard conversion).
  59.                  }*/
  60. random_source& operator>>(unsigned char& x);
  61. /*{Mbinop      extracts an unsigned character $x$ of default precision or 
  62.                 range and returns var. }*/
  63. random_source& operator>>(long& x);
  64. random_source& operator>>(int& x);
  65. /*{Mbinop      extracts an integer $x$ of default precision or range and 
  66.                 returns var. }*/
  67. random_source& operator>>(unsigned long& x);
  68. random_source& operator>>(unsigned int& x);
  69. /*{Mbinop      extracts an unsigned integer $x$ of default precision or
  70.                 range and returns var. }*/
  71.        
  72. random_source& operator>>(float& x);
  73. random_source& operator>>(double& x);
  74. /*{Mbinop      extracts a real number $x$ in $[0,1]$, i.e,
  75.                 $u/(2^{31} -1)$ where $u$ is a random integer in 
  76.                 $[0..2^{31}-1]$,
  77.                 and returns var.}*/
  78. #ifdef __BUILTIN_BOOL__
  79. random_source& operator>>(bool& b);
  80. /*{Mbinop      extracts a random boolean value (true or false). }*/
  81. #endif
  82. // raw read (31 bit)
  83. unsigned get();
  84. /*{Mop            returns an unsigned integer of maximal precision (31 bits). }*/
  85. // operator()
  86. int operator()();    
  87. /*{Mfunop         returns an integer $x$.}*/
  88. int operator()(int prec);
  89. /*{Mfunop         returns an integer $x$ of supplied precision $prec$. }*/
  90. int operator()(int low, int high);
  91. /*{Mfunop         returns an integer $x$ from the supplied range $[low..high]$. }*/
  92. };
  93. extern random_source rand_int;   // standard random input stream
  94. #endif