在两个浮点之间生成随机浮点数

Mak*_*aks 26 c++ random

我知道这是一个相当简单的问题,但我不太擅长数学.

我知道如何生成0到1之间的随机浮点数:

float random = ((float) rand()) / (float) RAND_MAX;
Run Code Online (Sandbox Code Playgroud)
  • 但是,如果我想要一个给定两个浮点范围的函数,那么返回该范围内的伪随机浮点数呢?

例:

RandomFloat( 0.78, 4.5 ); //Could return 2.4124, 0.99, 4.1, etc.
Run Code Online (Sandbox Code Playgroud)

Wim*_*Wim 30

float RandomFloat(float a, float b) {
    float random = ((float) rand()) / (float) RAND_MAX;
    float diff = b - a;
    float r = random * diff;
    return a + r;
}
Run Code Online (Sandbox Code Playgroud)

这是通过返回a的东西,其中一些是0到1之间b-a,这使得两者之间的最终结果谎言ab.

  • 它现在写的方式,如果`b <a`,那么`diff <0`和`a + r`将是`<a`. (2认同)

Dou*_* T. 7

float 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;
}
Run Code Online (Sandbox Code Playgroud)