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 du membre
Ythunder
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4549
Enregistré le : 09 août 2008 17:46
Localisation : 03

L'explication sur l'instruction RANDOM

Message par Ythunder »

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 !
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 ?
Avatar du membre
SbM
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4609
Enregistré le : 24 nov. 2004 21:49
Localisation : SQY (78), France
Contact :

Re: L'explication sur l'instruction RANDOM

Message par SbM »

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 : 1799
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: L'explication sur l'instruction RANDOM

Message par destroyedlolo »

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 du membre
Gege34
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1166
Enregistré le : 03 oct. 2014 11:19
Localisation : 31

Re: L'explication sur l'instruction RANDOM

Message par Gege34 »

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.
Commodore (64/128/Amiga), HP (28/41/48/50/71/75/200/Prime) et autres (Ti, Canon X07, Psion, Casio, Palm, Thomson, Exl, Amstrad)
Avatar du membre
rogeroge
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4227
Enregistré le : 14 mai 2010 21:41
Localisation : Entre Nancy et Bercy : à Torcy

Re: L'explication sur l'instruction RANDOM

Message par rogeroge »

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 du membre
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4642
Enregistré le : 31 oct. 2006 15:08
Localisation : 67310 Westhoffen
Contact :

Re: L'explication sur l'instruction RANDOM

Message par pir2 »

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

Retourner vers « Tous les ordinateurs »