2010-11-30 5 views

Répondre

11

Essayez ceci:

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

Essayez ceci:

  1. rand() vous donne un nombre compris entre 0 et RAND_MAX
  2. donc diviser par RAND_MAX pour obtenir un nombre compris entre 0 et 1
  3. vous désirez une gamme de 100 de -50 à 50, alors multipliez par 100.0
  4. finalement décaler le centre de 50 (entre 0 et 100 par le point 3) à zéro en soustrayant 50.0
4
((float)rand())/RAND_MAX * 100.0 - 50.0 
4

Honnêtement, toutes les réponses actuelles n'expliquent pas qu'il y ait un changement dans la distribution de leurs solutions (je suppose que rand() suit la distribution uniforme! corrigez-moi si je me trompe s'il vous plaît). Utilisez une bibliothèque s'il vous plaît, et ma recommandation utilise les nouvelles installations en C++ 0x:

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

Si vous ne pouvez pas, Boost est un choix parfait. De cette façon, vous pouvez utiliser my_rand() tout comme le bon vieux rand():

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

La question dit qu'il doit utiliser 'rand' spécifiquement. Mais oui, je suis d'accord; Si la distribution est vraiment importante, le boost semble être une bonne option. – Maxpm

+1

@Max: Plus précisément, la question dit "essayer ... en utilisant rand()"; l'OP n'a jamais dit que c'était une * exigence *. – Cascabel

+0

@Jefromi Bon point. Je dois être plus privé de sommeil que d'habitude. : P – Maxpm

Questions connexes