#1 Le 14/03/2007, à 15: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, à 15:01)
Hors ligne
#2 Le 14/03/2007, à 15: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, à 17:53
- any
Re : [C++]Améliorer la vitesse du fonction donnant un nombre aléatoire
une marco suffit non
#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, à 00:10
- Premium
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
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
Hors ligne
#5 Le 15/03/2007, à 10: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