2010-11-30 20 views
10

Rand() kullanılarak, -50.0 ve 50.0 aralığındaki rastgele bir float üretmeye çalışıyorum. Her yerde bir cevap için baktım ama inters ve% operatörü ile ilgileniyor.Negatif float negatiften pozitif aralığa mı üretiliyor?

+0

olası yinelenen [C++ rasgele şamandıra] (http://stackoverflow.com/questions/686353/c-random-float: Bu şekilde, sadece iyi ol' rand() gibi my_rand() kullanabilir –

cevap

11

bu deneyin:

float RandomNumber(float Min, float Max) 
{ 
    return ((float(rand())/float(RAND_MAX)) * (Max - Min)) + Min; 
} 
5

bu deneyin:

  1. rand() böylece -50 ila 100 bir dizi arzu 0 ve
  2. 1 arasında bir sayı elde etmek RAND_MAX bölün size 0 ve
  3. RAND_MAX arasında bir sayı verir 50, 100.0
  4. ile çarpmak suretiyle, son olarak merkezi 50'den (0 ve 100'de nokta 3 arasında) 50.0
çıkartılarak sıfıra getirin.
4
((float)rand())/RAND_MAX * 100.0 - 50.0 
4

Dürüst, bütün mevcut cevaplar onların çözümlerinde dağılımında bir değişiklik (O rand (varsayıyorum) 'dir tekdüze dağılım aşağıdaki açıklamaya yok! eğer yanılıyorsam beni düzelt lütfen. kütüphane lütfen kullanın ve benim öneri C++ 0x ile yeni tesisler kullanıyor:

#include <random> 
#include <functional> 

int main() 
{ 
    std::mt19937 generator; 
    std::uniform_real_distribution<float> uniform_distribution(-50.0, 50.0); 
    auto my_rand = std::bind(uniform_distribution, generator); 
} 

yapamazsın Eğer Boost mükemmel bir seçimdir. arasında

std::vector<float> random_numbers(1000); 
std::generate(random_numbers.begin(), random_numbers.end(), my_rand); 
+0

Soru, özellikle 'rand' kullanması gerektiğini söylüyor. Ama evet, katılıyorum; Dağıtım gerçekten önemliyse, o zaman destek iyi bir seçenek gibi görünüyor. – Maxpm

+1

@Max: Daha doğrusu, soru "kullanarak ... kullanma rand()"; OP asla bir * gereklilik olduğunu söylemedi *. – Cascabel

+0

@Jefromi İyi nokta. Her zamankinden daha fazla uykusuz kalmalıyım. : P – Maxpm