Pareil pour moi, les chiffres varient correctement !Dobro a écrit :je pense que t'a un problem avec ton ordi !!
chez moi mon programme en console fait varier les chiffres !!![]()
Annuler un RandomSeed
tiens si tu prefere avec ton code voila
Code : Tout sélectionner
OpenConsole()
PrintN("DodoRandom(X)")
PrintN("")
PrintN("OpenConsole()")
PrintN("For i=1 To 10")
PrintN("RandomSeed (100)")
PrintN("PrintN(Str(Random(100)))")
PrintN("PrintN(Str(Random(100)))")
PrintN("PrintN(Str(Random(100)))")
PrintN("PrintN(Str(Random(100)))")
PrintN("PrintN('==')")
PrintN("Next")
PrintN("Repeat")
PrintN("ForEver")
PrintN("")
For i=1 To 10
RandomSeed (Random(3000))
PrintN(Str(Random(100)))
PrintN(Str(Random(100)))
PrintN(Str(Random(100)))
PrintN(Str(Random(100)))
PrintN("==")
Next
Repeat
ForEver
la les chifre ne se repete jamais !
Dodo tu veux dire ?Cpl.Bator a écrit :Houla, SPH t'a vraiment le don d'énerver Mitch![]()
NON NON et NON !!Cpl.Bator a écrit :Mise à part sa, le randomseed(random(xxx)) marche très bien.

Vous commettez TOUS la meme erreur !!
Executez ca et seulement ca :
Code : Tout sélectionner
Debug ("Aleatoires :")
Debug Random (50)
Debug Random (50)
Debug Random (50)
Debug Random (50)
RandomSeed(50)
Debug ""
Debug ("Non aleatoires :")
Debug Random(50)
Debug Random(50)
Debug Random(50)
Debug Random(50)
RandomSeed(Random(20))
Debug ""
Debug ("Non aleatoires d'une autre table :")
Debug Random(50)
Debug Random(50)
Debug Random(50)
Debug Random(50)
a, b, c et d sont aleatoires, et eux seuls.Aleatoires :
a
b
c
d
Non aleatoires :
22
23
47
37
Non aleatoires d'une autre table :
26
0
17
26
Vous aurez beau faire autant de RUN que vous voudrez, vous aurez TOUJOURS les memes resultats.
PKOI ?
C'est fort simple : Le piege est ici :
Code : Tout sélectionner
RandomSeed(Random(20))
Donc, puisque "Random(20)" est une constante, ca reviens a changer de table aleatoire pour en prendre une autre; helas TJR la meme !
Vous avez capté maintenant ???????


Donc, pour annuler un RandomSeed, il faut (a defaut d'avoir un 'KillRandomSeed') un :
Interroger le ElapsedMilliseconds() est une solution temporaire mais pas parfaite car un programme demarrant avec la machine aura presque a coup sûr le meme ElapsedMilliseconds() et là, on retombe sur un nombre non reellement aleatoire...RandomSeed(Nombre_reellement_Aleatoire)
Captain bator, il y a une difference entre :Cpl.Bator a écrit :Avec un Randomseed(random(65535)) pas de pb. bizarre.
Code : Tout sélectionner
RandomSeed(Random(65535))
Debug Random(100)
Code : Tout sélectionner
RandomSeed(15)
RandomSeed(Random(65535))
Debug Random(100)
- Le premier code donne en effet un nombre reellement aleatoire entre 0 et 100; lui meme basé sur une "table aleatoire" de 0 a 65535.
- Le deuxieme code est condamné a donner le nombre ZERO non aleatoire donc; et ce, malgré le faramineux RANDOM(65535) car le premier RandomSeed(15) condamne notre pauvre random(65535) a pointer sur "la table aleatoire" numero 59892 (si je puis m'exprimer ainsi !!)
Voici un moyen de retourner a coup sûr au mode aleatoire :
Code : Tout sélectionner
Debug ("Mode reellement aléatoire")
Debug Random(100)
Debug Random(100)
Debug Random(100)
Debug Random(100)
Debug ("-")
RandomSeed(10)
Debug ("Mode 'pseudo' aléatoire de la 'TableSeed' 10")
Debug Random(100) ; non aleatoire donc
Debug Random(100) ; non aleatoire donc
Debug Random(100) ; non aleatoire donc
Debug Random(100) ; non aleatoire donc
Debug ("-")
RandomSeed(Date()-ElapsedMilliseconds())
Debug ("Retour au Mode reellement aléatoire")
Debug Random(100)
Debug Random(100)
Debug Random(100)
Debug Random(100)
Je n'ai rien contre toi, captain, mais quand je lis les posts de dodo et maintenant le post de poshu qui ne comprennent rien a ce mecanisme purement logique, j'en viens a me demander comment ils ont survecu aussi longtemps dans le monde complexe de la programmation !
Dernière modification par SPH le dim. 08/oct./2006 12:57, modifié 1 fois.
Après plusiers essais, voici ce que cela me donneLes 2 conditions RandomSeed(Date()) et RandomSeed(ElapsedMilliseconds()) ne pourront plus jamais nous redonner la meme serie de nombres aleatoires. ElapsedMilliseconds avait le probleme du programme demarrant avec la machine, et Date avait le probleme de l'interval de moins d'une seconde.
Regardez bien le "Mode reellement aléatoire" et le "Retour au Mode reellement aléatoire"Mode reellement aléatoire
7
57
16
83
-
Mode 'pseudo' aléatoire de la 'TableSeed' 10
15
54
13
67
-
Retour au Mode reellement aléatoire
7
57
16
83
************** Nouvel essai **************
Mode reellement aléatoire
91
66
90
79
-
Mode 'pseudo' aléatoire de la 'TableSeed' 10
15
54
13
67
-
Retour au Mode reellement aléatoire
91
66
90
79

c'est ce que Dri (et moi) lui avons dit au debut !!
il n'y a pas de mode reellement aléatoire avec un ordi
puisque la sequence est toujour prise a partir d'une liste immuable
en fait ton exemple montre que le premier random(100) est deja une sequence "previsible" car un RandomSeed(x) est effectué au lancement du compillateur ....
donc cela revien a dire que mon RandomSeed(random(32000)) n'est pas plus idiot que RandomSeed(ElapsedMilliseconds()) !!!
puisque le RandomSeed(x) fait en fait sauter le pointeur de la liste a un endroit autre de cette meme liste
il me semble me souvenir que dans ST mag ils en avaient parlé
en expliquant que la liste de base sur lequel se promene un pointeur
(le fameux RandomSeed(x) du purebasic)
est une liste de chiffre a virgule qui va de 0 a 1 !!
il n'y a pas de mode reellement aléatoire avec un ordi
puisque la sequence est toujour prise a partir d'une liste immuable
en fait ton exemple montre que le premier random(100) est deja une sequence "previsible" car un RandomSeed(x) est effectué au lancement du compillateur ....
donc cela revien a dire que mon RandomSeed(random(32000)) n'est pas plus idiot que RandomSeed(ElapsedMilliseconds()) !!!

puisque le RandomSeed(x) fait en fait sauter le pointeur de la liste a un endroit autre de cette meme liste

il me semble me souvenir que dans ST mag ils en avaient parlé
en expliquant que la liste de base sur lequel se promene un pointeur
(le fameux RandomSeed(x) du purebasic)
est une liste de chiffre a virgule qui va de 0 a 1 !!

Dernière modification par Backup le dim. 08/oct./2006 10:26, modifié 1 fois.