static const int M = 2147483647;
static const int A = 48271;
static const int Q = M / A;
static const int R = M % A;
class
{
public:
explicit (int initialValue = 1);
int randomInt();
double random0_1();
int randomInt(int low, int high);
private:
int state_;
};
Random::Random(int initialValue)
{
if(initialValue < 0)
initialValue += M;
state_ = initialValue;
if(state_ == 0)
state_ = 1;
}
int Random::randomInt()
{
int tempState = A * (state_ % Q) - R*(state_ / Q);
if(tempState >= 0)
state_ = tempState;
else
state_ = tempState + M;
return state_;
}
double Random::random0_1()
{
return (double)randomInt() / M;
}
int Random::randomInt(int low, int high)
{
if(low > high)
return -1;
return randomInt() % (high - low + 1) + low;
}
int main()
{
Random r;
printf("%dn", r.randomInt());
printf("%fn", r.random0_1());
printf("%dn", r.randomInt(3, 10));
return 0;
}
近期评论