Aller au contenu
jjacques68

Besoin d’explications sur math.random

Recommended Posts

Bonsoir à tous :

 

Je constate une chose étrange avec la fonction random.

si j’essaye ceci :

print(math.random(10))

Après plusieurs lancement,s je me retrouve toujours avec la même valeur.

D’après mes recherches, cela viendrait du fait qu’il faille initialiser le générateur avec math.randomseed().

Donc je fais ça : 

math.randomseed(os.time())
print(math.random(10))

Et là ça semble mieux fonctionner, mais j’ai toujours les mêmes valeurs au démarrage.

Certain dise qu’il faut ajouter math.random() 3 x de suite encore avant... :mellow:

 

Quelqu’un a des explications à me donner ? Et/ou a une solution pour avoir un vrai générateur de nombre aléatoire ?

 

C’est étrange, j’ai constaté exactement le même problème avec d’autres languages (Windev, VBA access).

Je me demande si nos supers ordinateurs de la mort qui tue sont capables de générer un nombre aléatoire ? ...:huh:

Après réflexion faite, il y a un algorithme derrière, et celui-ci est donc toujours identique ?!!!? Donc le nombre tiré est toujours le même ?! Du moins pour le premier !

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

Les fonctions aléatoires n'existent pas en informatique. Ce sont des fonctions pseudo-aléatoires.

Donc si tu fais

print(math.random(10))

C'est normal que tu obtiennes toujours le même résultat.

Par contre, si tu fais

print(math.random(os.time()))

tu obtiendras des résultats différents à chaque fois.

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

J'allais répondre la même chose que Berale :)

Partager ce message


Lien à poster
Partager sur d’autres sites

:)

 

alors pour bien compléter la chose, il faut faire une tempo d'une seconde d'un tirage à l'autre (vu que LUA fonctionne à la seconde)

Voilà mes essais très rapides et plutôt concluant :

function Randomize(x)
	math.randomseed(os.time())
	return math.random(x)
end

while true do
	print(Randomize(10))
	fibaro:sleep(1100)
end

Et là j'ai une suite de nombre pseudo-aléatoire.

En dessous d'une seconde, y a de la répétition.

 

Voilà maintenant je peux tirer un numéro au sort dans une table...

 

Merci !

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×