Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/03/2007, à 16:00

Premium

[C++]Améliorer la vitesse du fonction donnant un nombre aléatoire

Bonjour,

j'ai écrit cette fonction pour obtenir un nombre aléatoire entre min et max inclus.

//Tirage aleatoire d'un nombre
int hasard(int min, int max){
  return (min + (rand() % (max - min + 1))); 
}

Cette fonction est utilisé des milliers de fois dans un programme.
Le lancement du mon programme met 17secondes pour afficher les résultats.

Je voudrais donc essayer d'améliorer cette fonction pour essayer de la rendre plus rapide.

Quelqu'un aurait-il une solution ?

Merci

Dernière modification par Premium (Le 14/03/2007, à 16:01)

Hors ligne

#2 Le 14/03/2007, à 16:54

TuRn3r

Re : [C++]Améliorer la vitesse du fonction donnant un nombre aléatoire

int hasard(int min, int max)
{
   return min + ((float)rand() / ((float)max + 1.0) );
}

Sans oublier le srand une et une seule fois pour toute au début

#3 Le 14/03/2007, à 18:53

any

Re : [C++]Améliorer la vitesse du fonction donnant un nombre aléatoire

une marco suffit non smile

#define RANDOM(min,max) (rand()%(max-min+1))+min

sinon pense a optimiser a la compilation (genre avec -O3) .

sans optimiser la compile:

MACRO:test sur 100000000 valeurs comprises entre [0,250] , tps=3

real    0m3.259s
user    0m3.224s
sys     0m0.032s

FCT1:test sur 100000000 valeurs comprises entre [0,250] , tps=6

real    0m5.783s
user    0m5.744s
sys     0m0.036s

avec -O3 :

MACRO:test sur 100000000 valeurs comprises entre [0,250] , tps=3

real    0m3.150s
user    0m3.112s
sys     0m0.032s

FCT1:test sur 100000000 valeurs comprises entre [0,250] , tps=3

real    0m3.125s
user    0m3.100s
sys     0m0.020s

#4 Le 15/03/2007, à 01:10

Premium

Re : [C++]Améliorer la vitesse du fonction donnant un nombre aléatoire

TuRn3r a écrit :

int hasard(int min, int max)
{
   return min + ((float)rand() / ((float)max + 1.0) );
}

Sans oublier le srand une et une seule fois pour toute au début

Le code écrit tel quel me produit une erreur de segmentation.
J'ai un autre soucis car mon programme executé chez moi met 57s à s'afficher mais 17s à la fac tongue

Hors ligne

#5 Le 15/03/2007, à 11:04

TuRn3r

Re : [C++]Améliorer la vitesse du fonction donnant un nombre aléatoire

Au temps pour moi :

#include <cstdlib>
#include <ctime>

int rnd(int a,int b) // Fonction qui retourne un nombre aléatoire
                                 // Entre a et b
{
    static bool init = false;

    if(!init)
    {
        srand(clock());
        init = true;
    }

    return (int)((rand()/RAND_MAX)*(b-a))+a;
}

Sinon, tu peux poster ta ligne de compilation ainsi que ta version de gcc et ton OS pour voir ton pb