2011-03-13 16 views
24

arasındaki rasgele float üretin Bunun oldukça basit bir soru olduğunu biliyorum, ancak matematikte çok iyi değilim.İki yüzer

Ben 0 ile 1 arasında rastgele bir şamandıra üretmek için biliyorum:

float random = ((float) rand())/(float) RAND_MAX; 
  • Ama iki yüzen bir dizi verilen bir işlev istiyorsanız, bu aralıktaki bir yalancı rasgele şamandıra döndürür ne var?

Örnek:

Bu şey a ve b arasına Sonuçta yalan yapar 0 ile b-a olduğunu a artı şey, dönen çalışır
RandomFloat(0.78, 4.5); //Could return 2.4124, 0.99, 4.1, etc. 
+2

Ayrıca, şamandıra üzerinde çift tercih eğer,: Böylece, fonksiyon olarak olabilir 2.5, 6.6 söylemek gibi MIN_RAND, MAX_RAND, herhangi bir değer olabilir. –

+1

[C++ rasgele float] olası kopyası (http://stackoverflow.com/questions/686353/c-random-float) –

cevap

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; 
} 

.

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

Rastgele int 2 arası:

+0

@ stefan Hayır, yapmazsınız. Eğer 'fabsf' eklediyseniz, son satırı da 'min (a, b) + r' olarak değiştirmeniz gerekir. – Wim

+2

Şimdi yazılan yol, eğer 'b Wim

+0

Haklısınız, sadece 1.0'ın alt değeri yapacağı kafa karıştırıcı;) – stefan

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, evet haklısınız. Rastgele nasıl hesaplandığını özledim ve 0-RAND_MAX'dan aşağı doğru ölçeklendirdim. Geriye ölçeklemem gerekiyormuş gibi görünüyor. –

0

Rastgele şamandıra 2 ila Eğer MIN_RAND ve MAX_RAND var

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

'-1', çünkü C++ standart kütüphanesinin daha iyi bir psödorandom nesline sahip olduğunu düşünürsek, bu cevap değerli bir şey eklemez. –

1

varsayalım aralıkları tanımlayarak, o zaman olabilir aşağıdakiler:

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 ; 

Bu, tercih ettiğiniz aralığa ölçeklendirilecek sayıyı size sağlayacaktır.

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

Bunun yerine C++ 11 rasgele jeneratörü kullanın. –

İlgili konular