Merge pull request #4582 from Chaplain/cleanup4

Core/Utilities: Implement random generator for float values.
NOTE: Actually just casts the outcome of int randgen to float
This commit is contained in:
Machiavelli
2012-01-03 03:52:26 -08:00
2 changed files with 21 additions and 7 deletions

View File

@@ -30,17 +30,22 @@
typedef ACE_TSS<SFMTRand> SFMTRandTSS;
static SFMTRandTSS sfmtRand;
int32 irand (int32 min, int32 max)
int32 irand(int32 min, int32 max)
{
return int32(sfmtRand->IRandom(min, max));
}
uint32 urand (uint32 min, uint32 max)
uint32 urand(uint32 min, uint32 max)
{
return sfmtRand->URandom(min, max);
}
int32 rand32 ()
float frand(float min, float max)
{
return float(sfmtRand->Random() * (max - min) + min);
}
int32 rand32()
{
return int32(sfmtRand->BRandom());
}
@@ -50,27 +55,33 @@ double rand_norm(void)
return sfmtRand->Random();
}
double rand_chance (void)
double rand_chance(void)
{
return sfmtRand->Random() * 100.0;
}
#else
typedef ACE_TSS<MTRand> MTRandTSS;
static MTRandTSS mtRand;
int32 irand(int32 min, int32 max)
{
return int32(mtRand->randInt (max - min)) + min;
return int32(mtRand->randInt(max - min)) + min;
}
uint32 urand(uint32 min, uint32 max)
{
return mtRand->randInt (max - min) + min;
return mtRand->randInt(max - min) + min;
}
float frand(float min, float max)
{
return float(mtRand->randExc(max - min) + min);
}
int32 rand32()
{
return mtRand->randInt ();
return mtRand->randInt();
}
double rand_norm(void)

View File

@@ -64,6 +64,9 @@ inline uint32 secsToTimeBitFields(time_t secs)
/* Return a random number in the range 0 .. RAND32_MAX. */
int32 rand32();
/* Return a random number in the range min..max */
float frand(float min, float max);
/* Return a random double from 0.0 to 1.0 (exclusive). Floats support only 7 valid decimal digits.
* A double supports up to 15 valid decimal digits and is used internally (RAND32_MAX has 10 digits).
* With an FPU, there is usually no difference in performance between float and double. */