我知道這是一個相當簡單的問題,但我不太擅長數學。在兩個浮點數之間產生隨機浮點數
我知道如何在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
加東西,其中事情是,這使得最終的結果在於a
和b
之間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:
@stefan不,你不知道。如果你添加'fabsf',那麼你需要把最後一行改爲'min(a,b)+ r'。 – Wim 2011-03-13 13:32:38
現在寫的方式是,如果'b Wim 2011-03-13 13:33:47
你是對的,只是令人困惑的是1.0會使得較低的值;) – stefan 2011-03-13 13:38:45
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
}
@stefan,是的,你是對的。我錯過了隨機數是如何計算的,並且將其從0-RAND_MAX縮減回來。看起來我需要將它縮小。 – 2011-03-13 13:34:34
隨機之間浮動2
int random_between_two_int(float min, float max)
{
return rand() % (max - min) + min + 1;
}
'-1'因爲考慮到C++標準庫有更好的僞隨機生成方式,這個答案沒有添加任何有價值的東西。 – 2014-05-26 10:45:30
假設你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 ;
}
改用C++ 11個隨機生成器。 – 2015-06-06 15:47:09
另外,如果可以的話,喜歡雙超浮動。 – 2011-03-13 13:29:27
[C++ random float]可能的重複(http://stackoverflow.com/questions/686353/c-random-float) – 2013-06-28 12:58:11