L'explication sur l'instruction RANDOM

Tout sur les ordinateurs, liens, infos...Avec un thread par machine. Si la machine n'y est pas , créez le premier post la concernant dans ce forum

Modérateur : Politburo

Répondre
Avatar de l’utilisateur
Ythunder
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6122
Inscription : 09 août 2008 17:46
Localisation : 03

L'explication sur l'instruction RANDOM

Message par Ythunder » 23 nov. 2016 11:53

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 !
Je suis CHARLIE
Tell me boy, do you have a room, in your heart, for the Computer boom...

Avatar de l’utilisateur
SbM
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5570
Inscription : 24 nov. 2004 22:49
Localisation : SQY (78), France
Contact :

Re: L'explication sur l'instruction RANDOM

Message par SbM » 23 nov. 2016 11:58

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
http://sbm.ordinotheque.free.fr | http://www.mo5.com
"Un bon disque dur est un disque dur mort." (Général Cluster)

destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1807
Inscription : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: L'explication sur l'instruction RANDOM

Message par destroyedlolo » 23 nov. 2016 12:05

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" :lol:
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word

Avatar de l’utilisateur
Gege34
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 644
Inscription : 03 oct. 2014 11:19
Localisation : 31

Re: L'explication sur l'instruction RANDOM

Message par Gege34 » 23 nov. 2016 12:08

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.
Amiga 1200 (gonflé et customisé), Amiga 1000, Amiga 600 + Vampire 600V2, Commodore 128 et son 1541, Amiga 500
HP 48g (gonflé), 48gx(*2), 49g, 50g, WP34S (faite maison)
PSION 5mx 16Mb, Casio FX4000P, Ti Voyage 200, Canon X07(*2) + X710 qui fonctionne pas

Avatar de l’utilisateur
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4791
Inscription : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: L'explication sur l'instruction RANDOM

Message par rogeroge » 23 nov. 2016 14:04

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 :

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 !

Avatar de l’utilisateur
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4731
Inscription : 31 oct. 2006 16:08
Localisation : 67310 Westhoffen
Contact :

Re: L'explication sur l'instruction RANDOM

Message par pir2 » 23 nov. 2016 15:17

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):

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
INI correspond au RANDOMIZE d'un Basic et RNDMW ... je ne vous fait pas l'affront de vous l'expliquer ;)
Image
Image

Répondre

Revenir vers « Tous les ordinateurs »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité