2011-03-13 127 views
24

我知道這是一個相當簡單的問題,但我不太擅長數學。在兩個浮點數之間產生隨機浮點數

我知道如何在0和1之間產生一個隨機浮動:

float random = ((float) rand())/(float) RAND_MAX; 
  • 但是,如果我想,鑑於兩個浮點數的範圍內的函數,返回一個僞隨機漂浮在這個範圍內?

實施例:

RandomFloat(0.78, 4.5); //Could return 2.4124, 0.99, 4.1, etc. 
+2

另外,如果可以的話,喜歡雙超浮動。 – 2011-03-13 13:29:27

+1

[C++ random float]可能的重複(http://stackoverflow.com/questions/686353/c-random-float) – 2013-06-28 12:58:11

回答

24
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東西,其中事情是,這使得最終的結果在於ab之間b-a介於0和。

float random_between_two_int(float min, float max)  
{  
    return (min + 1) + (((float) rand())/(float) RAND_MAX) * (max - (min + 1));  
} 

隨機INT之間2:

+0

@stefan不,你不知道。如果你添加'fabsf',那麼你需要把最後一行改爲'min(a,b)+ r'。 – Wim 2011-03-13 13:32:38

+2

現在寫的方式是,如果'b Wim 2011-03-13 13:33:47

+0

你是對的,只是令人困惑的是1.0會使得較低的值;) – stefan 2011-03-13 13:38:45

4
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 
} 
+0

@stefan,是的,你是對的。我錯過了隨機數是如何計算的,並且將其從0-RAND_MAX縮減回來。看起來我需要將它縮小。 – 2011-03-13 13:34:34

0

隨機之間浮動2

int random_between_two_int(float min, float max)  
{  
    return rand() % (max - min) + min + 1;  
} 
+1

'-1'因爲考慮到C++標準庫有更好的僞隨機生成方式,這個答案沒有添加任何有價值的東西。 – 2014-05-26 10:45:30

1

假設你MIN_RAND和MAX_RAND定義範圍,那麼你可以有如下:

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 ; 

這將爲您提供縮放到您的首選範圍的數字。 MIN_RAND,MAX_RAND可以是任何值,好比說2.5,6.6 因此,該功能可爲:

float RandomFloat(float min, float max) { 
    return (max - min) * ((((float) rand())/(float) RAND_MAX)) + min ; 
} 
+1

改用C++ 11個隨機生成器。 – 2015-06-06 15:47:09