[C/UNIX] le random prévisible

le random prévisible [C/UNIX] - Programmation

Marsh Posté le 30-04-2001 à 21:19:02    

Comment faire un random qui soit dans une fourchette de valeurs relativement faibles et que les resultats ne soient pas cycliques.
 
J'ai tenté de faire random() divise par une constante (pour avoir plus de chance de tomber dans ma fourchette) mais je retrouve les mêmes séquences a chaque execution de mon programme.

 

[edit]--Message édité par Titoine42--[/edit]

Reply

Marsh Posté le 30-04-2001 à 21:19:02   

Reply

Marsh Posté le 30-04-2001 à 21:32:46    

Titoine42 a écrit a écrit :

Comment faire un random qui soit dans une fourchette de valeurs relativement faibles et que les resultats ne soient pas cycliques.
 
J'ai tenté de faire random() divise par une constante (pour avoir plus de chance de tomber dans ma fourchette) mais je retrouve les mêmes séquences a chaque execution de mon programme.
 
 




 
Il faut que initialise la séquence avec une valeur à toi (et qui change bien sûr) . Généralement on prend l'heure ou le pid du process comme seed.
Ex : srand(getpid());

Reply

Marsh Posté le 30-04-2001 à 21:44:09    

Voir l'ancien topic, si cela peut t'aider :
 
http://forum.hardware.fr/sqlforum/ [...] inc&cache=
 
Salutations

Reply

Marsh Posté le 30-04-2001 à 22:34:16    

tfj57> Merci !  :jap:  
 
Titoine42> Tu fais combien de tirages aléatoires ? Si c'est peu, alors c'est parce que tu ne fais pas "srand(getpid())" ou (plus courant) "srand(time())". Si c'est beaucoup au moin 5000 ou 10 000, alors il faut que tu changes de générateur aléatoire.

Reply

Marsh Posté le 30-04-2001 à 22:46:13    

Je fais entre 2000 et 5000 tirages mais je veux un nombre entre 1 et 4 chiffres maxi.
Je precise que le tout doit etre le plus rapide possible.
 
En fait, c'est pour le positionnement aleatoire de ressources pour une sorte de jeu de strategie.

Reply

Marsh Posté le 01-05-2001 à 00:26:59    

#include <stdlib.h>
 
int   my_rand(int n)
{
  int value;
 
  srand(time(0));
  value = (rand()%n);
  return (value);
}

 

[edit]--Message édité par R@NNIS--[/edit]


---------------
Mes News
Reply

Marsh Posté le 01-05-2001 à 01:01:10    

Tu peux rester au généteur 16-bits standard, mais à mon avis, il te manque un appel à srand().
 
PS: Pas besoin de le faire à chaque tirage, c'est trop coûteux. Le faire une fois au début suffit amplement ! Et après, tu fais des "rand() % MY_MAX_VALUE".

Reply

Marsh Posté le 01-05-2001 à 12:28:09    

ca c est clair sinon c est bien lent ...


---------------
Mes News
Reply

Marsh Posté le 01-05-2001 à 13:04:53    

Super! Ca fonctionne! :bounce:
 
merci a tous :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed