Bonjour
suite a un post dans a section des pocket (sur gazette n°9), cela m'a rappelé que l’instruction RANDOM, RND, etc ne génère visiblement pas une vraie suite de chiffres aléatoires, car au bout d'un moment, les chiffres sortis tournent en boucle.
Est ce que quelqu'un aurait le pourquoi du comment technique, de cette instruction ? Sachant qu'elle existe dans tout les BASIC me semble t-il.
Merci !
L'explication sur l'instruction RANDOM
Modérateur : Politburo
- Ythunder
- Fonctionne à 9600 bauds
- Messages : 4559
- Enregistré le : 09 août 2008 17:46
- Localisation : 03
L'explication sur l'instruction RANDOM
Quand je lis ça "oui des passionnées qui modifie des machines pour en faire des moutons a 5 pattes qui n'ont plus rien a voir avec la machine d'origine afin de faire la video choc sur youtube..."
Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?
Ca me fait rire. Perso, je n'ai ni chaine youtube sur les machines et je n'ai aucun mouton à 5 pattes qui n'a pàlus rien a voir avec des machines d'origine. Mais à qui s'adressait on ?
- SbM
- Fonctionne à 9600 bauds
- Messages : 4609
- Enregistré le : 24 nov. 2004 21:49
- Localisation : SQY (78), France
- Contact :
Re: L'explication sur l'instruction RANDOM
De ce que je me souviens ça piochait les chiffres dans un « tableau » interne (en résumé).
Il existe généralement des instructions pour « aléatoiriser » davantage la chose, genre RANDOMIZE TIME sur Amstrad CPC (qui prend le temps depuis l'allumage de la machine pour servir de « racine » aléatoire) : http://amstrad.eu/modules/lexikon/entry.php?entryID=280
Il existe généralement des instructions pour « aléatoiriser » davantage la chose, genre RANDOMIZE TIME sur Amstrad CPC (qui prend le temps depuis l'allumage de la machine pour servir de « racine » aléatoire) : http://amstrad.eu/modules/lexikon/entry.php?entryID=280
http://sbm.ordinotheque.free.fr | http://www.mo5.com
"Un bon disque dur est un disque dur mort." (Général Cluster)
"Un bon disque dur est un disque dur mort." (Général Cluster)
-
- Fonctionne à 2400 bauds
- Messages : 1806
- Enregistré le : 03 mai 2003 02:24
- Localisation : Nonglard (Annecy)
- Contact :
Re: L'explication sur l'instruction RANDOM
Salut,
C'est parce qu'en fait, il s'agit d'une pseudo fonction aléatoire (il me semble meme que c'est le terme employé dans les docs de certains basic, les Sharp peut-être).
Donc, a partir du moment où tu as la même valeur initiale, tu vas te retrouvé immanquablement avec la même suite.
Certains BASIC on la fonction RANDOMIZE qui initialise cette valeur initiale par une autre valeur pseudo aléatoire (basé sur des trucs qui bougent dans l'OS, genre des pointeurs, derniere valeur calculé, contenu de la pile ...).
Le problème est aussi valable sur les machines actuelles : c'est pourquoi on se base généralement sur l'horloge uS pour rendre les choses un peu plus "aléatoire"
C'est parce qu'en fait, il s'agit d'une pseudo fonction aléatoire (il me semble meme que c'est le terme employé dans les docs de certains basic, les Sharp peut-être).
Donc, a partir du moment où tu as la même valeur initiale, tu vas te retrouvé immanquablement avec la même suite.
Certains BASIC on la fonction RANDOMIZE qui initialise cette valeur initiale par une autre valeur pseudo aléatoire (basé sur des trucs qui bougent dans l'OS, genre des pointeurs, derniere valeur calculé, contenu de la pile ...).
Le problème est aussi valable sur les machines actuelles : c'est pourquoi on se base généralement sur l'horloge uS pour rendre les choses un peu plus "aléatoire"
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Re: L'explication sur l'instruction RANDOM
Sur les ordis les nombres pseudo-aléatoires sont générés par une formule mathématique, c'est pour cela qu'il y a parfois une fonction d'initialisation pour donner la graine de départ.
L'avantage du pseudo aléatoire c'est que c'est reproductible, donc en partant de la même graine on a la même séquence et en cas de bug on peut reproduire le problème.
L'avantage du pseudo aléatoire c'est que c'est reproductible, donc en partant de la même graine on a la même séquence et en cas de bug on peut reproduire le problème.
Commodore (64/128/Amiga), HP (28/41/48/50/71/75/200/Prime) et autres (Ti, Canon X07, Psion, Casio, Palm, Thomson, Exl, Amstrad)
- rogeroge
- Fonctionne à 9600 bauds
- Messages : 4250
- Enregistré le : 14 mai 2010 21:41
- Localisation : Entre Nancy et Bercy : à Torcy
Re: L'explication sur l'instruction RANDOM
Bonjour
Dans la Gazette 7, j'ai publié une application permettent de déjouer en partie
le caractère cyclique de l'instruction basic type RANDOM en introduisant une
boucle temporisée. C'est en page 32 et voici un extrait :
Dans la Gazette 7, j'ai publié une application permettent de déjouer en partie
le caractère cyclique de l'instruction basic type RANDOM en introduisant une
boucle temporisée. C'est en page 32 et voici un extrait :
Code : Tout sélectionner
.......
60 FOR A=0 TO 32766 STEP 1
70 A$=INKEY$:IF A$ = "" THEN 80 ELSE 90
80 NEXT A
90 IF A=32767 THEN 60
100 RANDOMIZE A
.......
Il faut être fou pour venir sur ce site mais encore plus fou pour ne pas y revenir !
- pir2
- Fonctionne à 9600 bauds
- Messages : 4647
- Enregistré le : 31 oct. 2006 15:08
- Localisation : 67310 Westhoffen
- Contact :
Re: L'explication sur l'instruction RANDOM
C'est bien pour çà qu'il existe dans certains Basic l'instruction RANDOMIZE TIME, qui utilise l'horloge en entrée comme SEED.
D'ailleurs, sur les anciennes TI et HP, un algo était proposé dans la doc, et sur HP-41, le module GAMES implémente cette fonction, le code est donc accessible (il utilise le registre 00):
INI correspond au RANDOMIZE d'un Basic et RNDMW ... je ne vous fait pas l'affront de vous l'expliquer
D'ailleurs, sur les anciennes TI et HP, un algo était proposé dans la doc, et sur HP-41, le module GAMES implémente cette fonction, le code est donc accessible (il utilise le registre 00):
Code : Tout sélectionner
01 LBL"INI
02 SF 21
03 DEG
04"SEED ?
05 PROMPT
06 SIN
07 ABS
08 RTN
09 LBL"RNDM
10 RCL 00
11 9821
12 *
13 .211327
14 +
15 FRC
16 STO 00
17 RTN
18 LBL"RNDMW
19 XROM"RNDM
20 *
21 INT
22 RTN