📄 random.h
字号:
/// This method is thread-safe.</summary>
/// <returns>Returns generate random value.</returns>
virtual int GACALL Generate()
{
unsigned int w1, w2;
_generator.Generate( w1, w2 );
return (int)w1 < 0 ? -(int)w1 : (int)w1;
}
/// <summary>This method generates random values in interval(0, <c>max</c>).
///
/// This method is thread-safe.</summary>
/// <param name="max">maximal value which can be generated.</param>
/// <returns>Returns generate random value.</returns>
virtual int GACALL Generate(const int& max) { return Generate() % max; }
/// <summary>This method generates random values in interval(<c>min</c>, <c>max</c>).
///
/// This method is thread-safe.</summary>
/// <param name="min">minimal value which can be generated.</param>
/// <param name="max">maximal value which can be generated.</param>
/// <returns>Returns generate random value.</returns>
virtual int GACALL Generate(const int& min,
const int& max) { return min + Generate( max - min ); }
};// END CLASS DEFINITION GaRandomInteger
/// <summary><c>GaRandomFloat</c> class generates random single precision floating-point numbers. Targeted architecture must support IEEE 754 standard.
/// The class implements <see cref="GaRandom" /> interface. This class has no built-in synchronizator, so <c>LOCK_OBJECT</c> and <c>LOCK_THIS_OBJECT</c>
/// macros cannot be used with instances of this class, but all public methods are thread-safe.</summary>
class GaRandomFloat : public GaRandom<float>
{
private:
/// <summary>Instance of algorithm for generating random numbers.</summary>
GaRandomGenerator _generator;
public:
/// <summary>This constructor initializes random generator with current time as seed.</summary>
GaRandomFloat() { }
/// <summary>This constructor initialize random generator with user-defined seed.</summary>
/// <param name="seed">user-defined seed.</param>
GaRandomFloat(unsigned long seed) : _generator(seed) { }
/// <summary>This method generates random values in interval(0, 1).
///
/// This method is thread-safe.</summary>
/// <returns>Returns generate random value.</returns>
virtual float GACALL Generate() { return _generator.GenerateFloat(); }
/// <summary>This method generates random values in interval(0, <c>max</c>).
///
/// This method is thread-safe.</summary>
/// <param name="max">maximal value which can be generated.</param>
/// <returns>Returns generate random value.</returns>
virtual float GACALL Generate(const float& max) { return max * _generator.GenerateFloat(); }
/// <summary>This method generates random values in interval(<c>min</c>, <c>max</c>).
///
/// This method is thread-safe.</summary>
/// <param name="min">minimal value which can be generated.</param>
/// <param name="max">maximal value which can be generated.</param>
/// <returns>Returns generate random value.</returns>
virtual float GACALL Generate(const float& min,
const float& max) { return min + ( max - min ) * _generator.GenerateFloat(); }
};// END CLASS DEFINITION GaRandomFloat
/// <summary><c>GaRandomDouble</c> class generates random double precision floating-point numbers. Class takes care about endianness of the architecture.
/// Targeted architecture must support IEEE 754 standard. The class implements <see cref="GaRandom" /> interface. This class has no built-in synchronizator,
/// so <c>LOCK_OBJECT</c> and <c>LOCK_THIS_OBJECT</c> macros cannot be used with instances of this class, but all public methods are thread-safe.</summary>
class GaRandomDouble : public GaRandom<double>
{
private:
/// <summary>Instance of algorithm for generating random numbers.</summary>
GaRandomGenerator _generator;
public:
/// <summary>This constructor initializes random generator with current time as seed.</summary>
GaRandomDouble() { }
/// <summary>This constructor initialize random generator with user-defined seed.</summary>
/// <param name="seed">user-defined seed.</param>
GaRandomDouble(unsigned long seed) : _generator(seed) { }
/// <summary>This method generates random values in interval(0, 1).
///
/// This method is thread-safe.</summary>
/// <returns>Returns generate random value.</returns>
virtual double GACALL Generate() { return _generator.GenerateDouble(); }
/// <summary>This method generates random values in interval(0, <c>max</c>).
///
/// This method is thread-safe.</summary>
/// <param name="max">maximal value which can be generated.</param>
/// <returns>Returns generate random value.</returns>
virtual double GACALL Generate(const double& max) { return max * _generator.GenerateDouble(); }
/// <summary>This method generates random values in interval(<c>min</c>, <c>max</c>).
///
/// This method is thread-safe.</summary>
/// <param name="min">minimal value which can be generated.</param>
/// <param name="max">maximal value which can be generated.</param>
/// <returns>Returns generate random value.</returns>
virtual double GACALL Generate(const double& min,
const double& max) { return min + ( max - min ) * _generator.GenerateDouble(); }
};// END CLASS DEFINITION GaRandomDouble
/// <summary><c>GaRandomBool</c> class generates random boolean values. It supports generating boolean with defined probabilities of
/// <c>true</c> and <c>false</c> states. The class implements <see cref="GaRandom" /> interface. This class has no built-in synchronizator,
/// so <c>LOCK_OBJECT</c> and <c>LOCK_THIS_OBJECT</c> macros cannot be used with instances of this class, but all public methods are thread-safe.</summary>
class GaRandomBool : public GaRandom<bool>
{
private:
/// <summary>Instance of algorithm for generating random numbers.</summary>
GaRandomGenerator _generator;
public:
/// <summary>This constructor initializes random generator with current time as seed.</summary>
GaRandomBool() { }
/// <summary>This constructor initialize random generator with user-defined seed.</summary>
/// <param name="seed">user-defined seed.</param>
GaRandomBool(unsigned long seed) : _generator(seed) { }
/// <summary>This method generates random Boolean values.
///
/// This method is thread-safe.</summary>
/// <returns>Returns generate random value.</returns>
virtual bool GACALL Generate()
{
unsigned int w1, w2;
_generator.Generate( w1, w2 );
return ( w1 & 1 ) == 1;
}
/// <summary>This method generates random Boolean values.
///
/// This method is thread-safe.</summary>
/// <param name="max">this parameter is ignored.</param>
/// <returns>Returns generate random value.</returns>
virtual bool GACALL Generate(const bool& max) { return Generate(); }
/// <summary>This method generates random Boolean values.
///
/// This method is thread-safe.</summary>
/// <param name="min">this parameter is ignored.</param>
/// <param name="max">this parameter is ignored.</param>
/// <returns>Returns generate random value.</returns>
virtual bool GACALL Generate(const bool& min,
const bool& max) { return Generate(); }
// Generates boolean with p probability of TRUE and 1-p probability of FALSE
/// <summary>This method generates Boolean value with <c>p</c> probability of <c>true</c> value.
///
/// This method is thread safe.</summary>
/// <param name="p">probability of <c>true</c> value (0, 1).</param>
/// <returns>Returns generate random value.</returns>
inline bool GACALL Generate(double p) { return _generator.GenerateFloat() < p; }
// Generates boolean with p probability of TRUE and 100-p probability of FALSE. p is expressed in
/// <summary>This method generates Boolean value with <c>p</c> probability of <c>true</c> and <c>100-p</c> of <c>false</c> value.
///
/// This method is thread safe.</summary>
/// <param name="p">probability in percents of <c>true</c> value (0 - 100).</param>
/// <returns>Returns generate random value.</returns>
inline bool GACALL Generate(int p)
{
unsigned int w1, w2;
_generator.Generate( w1, w2 );
return (int)w1 % 100 < p;
}
};// END CLASS DEFINITION GaRandomBool
} // Common
#endif // __GA_RANDOM_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -