2016-04-21 1 views
0

J'ai la fonction ci-dessous pour générer un nombre aléatoire dans une plage min, max:Décimal Générer un nombre aléatoire dans une fourchette incluant les négatifs?

#include <stdlib.h>  /* srand, rand */ 
#include <time.h>  /* time */ 

//.. 

int GenerateRandom(int min, int max) //range : [min, max) 
{ 
    static bool first = true; 
    if (first) 
    { 
     srand(time(NULL)); //seeding for the first time only! 
     first = false; 
    } 

    return min + rand() % (max - min); // returns a random int between the specified range 
} 

Je veux inclure des fonctionnalités c++ create a random decimal between 0.1 and 10 et/ou create a random decimal number between two other numbers fonctionnalité dans la fonction ci-dessus sans négatifs à l'exclusion. Donc, je veux obtenir la décimale entre « toute » gamme: [negative, negative], [negative, positive] et [positive, positive]

+1

Pourriez-vous intégrer les informations contenues dans les liens dans le poste lui-même? – kaveish

+0

Hey @kaveish, la fonctionnalité est résumée par le titre de ces liens. Les deux sont dans la gamme positive. Je voulais le garder propre mais je vais l'inclure. Merci –

+1

La méthode 'C++ 11' [ici] (http://stackoverflow.com/a/19652723/1885037) fonctionne à la fois pour les décimales positives et négatives. – kaveish

Répondre

1

Vous devez juste vous assurer que min, max sont commandés correctement, et utiliser à virgule flottante plutôt que des entiers, par exemple

double GenerateRandom(double min, double max) 
{ 
    static bool first = true; 
    if (first) 
    { 
     srand(time(NULL)); 
     first = false; 
    } 
    if (min > max) 
    { 
     std::swap(min, max); 
    } 
    return min + (double)rand() * (max - min)/(double)RAND_MAX; 
} 

LIVE DEMO

+0

Salut Paul. Mais je veux un nombre décimal si –

+0

@ FirstStep: OK, réponse mise à jour pour le point à virgule flottante. –

+0

Ne fonctionne pas, l'entrée est toujours entière –