//---------------------------------------------------------------------------
int iRand() {
// Аналог rand() для юродиевых версий "любимой" Windows, где RAND_MAX=32767
int iR=rand();
if ( RAND_MAX == 32767 ) { // 32767=2**15-1
iR <<= 15; // iR = iR*32768 (32768=2**15)
int iL = rand();
iR |= iL; // iR = rand()*(2**15)+rand;
}
return iR;
}
//---------------------------------------------------------------------------
int iRandom(int iMin, int iMax) {
// Возвращает случайное целое число между iMin и iMax. Границы могут генерироваться
if (iMin < iMax)
return iMin + iRand() % (iMax - iMin + 1);
else if ( iMin == iMax )
return iMin;
else
return iMin - 1; // Если границы заданы неверно, то возвращается такое число
}
//---------------------------------------------------------------------------
double dbRandom(double dbMin, double dbMax) {
// Возвращает случайное вещественное число между dbMin и dbMax. Границы могут генерироваться
if (dbMin < dbMax) {
if (RAND_MAX == 32767)
return dbMin + ((dbMax - dbMin) * (double)iRand()) / 1073741823.0; // = double(2**30-1)
else
return dbMin + ((dbMax - dbMin) * (double)iRand()) / (double)RAND_MAX;
}
else if (dbMin == dbMax)
return dbMin;
else
return dbMin - 1.0;
}
//---------------------------------------------------------------------------