我知道这是一个相当简单的问题,但我不太擅长数学。
我知道如何生成一个介于0和1之间的随机浮点数:
float random = ((float) rand()) / (float) RAND_MAX;
- 但是,如果我想要一个函数,在给定两个浮点数范围的情况下返回该范围内的伪随机浮点数呢?
例如:
RandomFloat( 0.78, 4.5 ); //Could return 2.4124, 0.99, 4.1, etc.
我知道这是一个相当简单的问题,但我不太擅长数学。
我知道如何生成一个介于0和1之间的随机浮点数:
float random = ((float) rand()) / (float) RAND_MAX;
例如:
RandomFloat( 0.78, 4.5 ); //Could return 2.4124, 0.99, 4.1, etc.
float RandomFloat(float a, float b) {
float random = ((float) rand()) / (float) RAND_MAX;
float diff = b - a;
float r = random * diff;
return a + r;
}
这个代码通过返回 a
和 something 之和来工作,其中 something 的值在 0 和 b-a
之间,这使得最终结果介于 a
和 b
之间。fabsf
,那么你还需要将最后一行改为 min(a,b) + r
。 - Wimb < a
,那么 diff < 0
并且 a + r
将会 < a
。 - Wimfloat RandomFloat(float min, float max)
{
// this function assumes max > min, you may want
// more robust error checking for a non-debug build
assert(max > min);
float random = ((float) rand()) / (float) RAND_MAX;
// generate (in your case) a float between 0 and (4.5-.78)
// then add .78, giving you a float between .78 and 4.5
float range = max - min;
return (random*range) + min;
}
float random_between_two_int(float min, float max)
{
return (min + 1) + (((float) rand()) / (float) RAND_MAX) * (max - (min + 1));
}
int random_between_two_int(float min, float max)
{
return rand() % (max - min) + min + 1;
}
const float MIN_RAND = 2.0, MAX_RAND = 6.0;
const float range = MAX_RAND - MIN_RAND;
float random = range * ((((float) rand()) / (float) RAND_MAX)) + MIN_RAND ;
float RandomFloat(float min, float max) {
return (max - min) * ((((float) rand()) / (float) RAND_MAX)) + min ;
}