struct rand_init
{
rand_init()
{
static bool initialized;
if (!initialized)
{
initialized = true;
init();
}
}
void init() const
{
std::srand(std::time(0));
}
};
rand_init rand_init_instance;
static unsigned long long_rand()
{
#if RAND_MAX < 65535
return (std::rand() & 0xFF) << 24 | (std::rand() & 0xFF) << 16 | (std::rand() & 0xFF) << 8 | (std::rand() & 0xFF);
#else
#if RAND_MAX < 4294967295
return (std::rand() & 0xFFFF) << 16 | (std::rand() & 0xFFFF);
#else
return std::rand() & 0xFFFFFFFFU;
#endif
#endif
}
int rand(int min, int max)
{
return int(double(long_rand()) / 4294967296.0 * double(max - min + 1) + double(min));
}
double rand(double min, double max)
{
return double(long_rand()) / 4294967296.0 * (max - min) + min;
}