Standardize the way we generate random numbers.

This commit is contained in:
Enrico Fraccaroli (Galfurian)
2023-06-22 15:42:00 -04:00
parent 87a796b440
commit ef6ef96576
4 changed files with 73 additions and 19 deletions
+26 -4
View File
@@ -70,8 +70,30 @@ char *getenv(const char *name);
/// @brief Allows to set the seed of the random value generator.
/// @param x The new seed.
void srand(int x);
void srand(unsigned x);
/// @brief Generates a random value.
/// @return The random value.
int rand();
/// @brief Generates a random unsigned integer between 0 and RAND_MAX.
/// @return the random value.
unsigned rand();
/// @brief Generates a random floating point number between 0 and 1.
/// @return the random value.
float randf();
/// @brief Generates a random integer between lb and ub.
/// @param lb the lower-bound value.
/// @param ub the upper-bound value.
/// @return the random value.
int randint(int lb, int ub);
/// @brief Generates a random unsigned between lb and ub.
/// @param lb the lower-bound value.
/// @param ub the upper-bound value.
/// @return the random value.
unsigned randuint(unsigned lb, unsigned ub);
/// @brief Generates a random float between lb and ub.
/// @param lb the lower-bound value.
/// @param ub the upper-bound value.
/// @return the random value.
float randfloat(float lb, float ub);
+23 -3
View File
@@ -83,14 +83,34 @@ void free(void *ptr)
}
/// Seed used to generate random numbers.
static int rseed = 0;
static unsigned rseed = 0;
void srand(int x)
void srand(unsigned x)
{
rseed = x;
}
int rand()
unsigned rand()
{
return rseed = (rseed * 1103515245U + 12345U) & RAND_MAX;
}
float randf()
{
return ((float)rand() / (float)(RAND_MAX));
}
int randint(int lb, int ub)
{
return lb + ((int)rand() % (ub - lb + 1));
}
unsigned randuint(unsigned lb, unsigned ub)
{
return lb + (rand() % (ub - lb + 1));
}
float randfloat(float lb, float ub)
{
return lb + (randf() * (ub - lb));
}