Bonjour,
J'ai vu que srand permettait la génération d'une suite aléatoire
et rand() une valeur aléatoire, (pseudo-aléatoire ne chippotons pas sur les termes :) , hors je voulais utiliser ces fonctions pour créer un fichier bidon qui servira a tester un mini-programme.
Hors je vois en lisant les résultats de ce mini programme que les chiffres générés sont tjrs les mêmes durant l'uptime de la machine.
comment résoudre ça ?
est ce que faire un ajout comme celui là résoudra le problème ?
[code]
....
#include <time.h>
....
....
srand(time(NULL));
....
Val_noeud=rand()%100+20;
.....
[/code]
à la place de l'actuell
[code]
....
srand();
....
[/code]
celà résoudra t il le problème ?
[b]PS[/b]: Je compilerai sur des gcc versions < à 3.3 (la machine de test actuellement compile en gcc 3.3 ou 4.0.2 au choix)
# Ce commentaire n'a pas de titre
Posté par ced . Évalué à 1.
Ta solution est tout aussi mauvaise pour générer de l'aléatoire, mais effectivement remplacer srand() par srand(time(NULL)) permet de générer une suite différente à chaque éxécution.
# Pseudo-aléa et initialisation
Posté par alf . Évalué à 5.
De plus, l'appel à rand sans avoir appelé srand revient à renvoyer le même pseudo-aléa qu'avec la graine 1. Il est donc normal que, sans srand, ton programme se comporte toujours de la même manière à chaque fois que tu l'appelles.
Dixit le n1124 :
Une manière classique de choisir une graine pour srand, que tu as reprise dans ton code, est de récupérer la date courante par un appel time(NULL) (*). Ainsi, la graine sera différente à chaque exécution de ton programme (pourvu que ton programme ne soit pas lié à une libc "customisée" ;-) ), et donc la suite de pseudo-aléa sera différente.
En passant, ces fonctions font partie de la bibliothèque C standard, donc dans ton contexte très probablement de la glibc, pas de gcc (qui n'inclut pas de bibliothèque C).
(*) time renvoie une valeur de type time_t, alors que srand attend un unsigned int. Ce n'est pas grave, la conversion implicite se fera si besoin. Les considérations sur la qualité de la graine qui en découlent sont un peu trop complexes... (de toute façon, si on vient à se poser cette question, il est probable qu'on cherchera à utiliser un autre générateur de pseudo-aléa que celui fourni par défaut)
[^] # Re: Pseudo-aléa et initialisation
Posté par alf . Évalué à 5.
# une lecture de /dev/urandom ça ne le ferait pas?
Posté par totof2000 . Évalué à 0.
# MERCI
Posté par frp31 . Évalué à 2.
srand(time(NULL));
par contre utiliser /dev/random ou urandom est une mauvaises soluion parceque d'un systèeme unix à un autre ou à un linux / BSD c'est pas forcément le même nom.
la solution interne au source C est donc la seule qui puisse me convenir.
meci encore
joyeux reveillon et à bientot.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.