Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2082 connectés 

  FORUM HardWare.fr
  Programmation

  [ALGO] Comment marche une fonction random() ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ALGO] Comment marche une fonction random() ?

n°33455
petoulachi
A fortiori, brigadier chef
Posté le 21-05-2001 à 14:50:34  profilanswer
 

Juste par curiosité, je cherche a savoir comment ça marche.
Bon j'ai commencé des recherches, et apparement le plus souvent se sont des suites mathematiques qui sont utilisées.
Mais moi ce que je me demande c'est; comment fait on pour faire varier le nombre ?
alors j'ai une reponse, mais je suis pas sur;
la fonction stocke dans un fichier un entier, s'en sert pour acceder a l'element de la suite, puis l'incremente, et le reecris dans le fichier.
C comme ça que ça marche ?

mood
Publicité
Posté le 21-05-2001 à 14:50:34  profilanswer
 

n°33457
BENB
100% Lux.
Posté le 21-05-2001 à 14:54:03  profilanswer
 

Non, c'est une variable statique je pense...

n°33466
petoulachi
A fortiori, brigadier chef
Posté le 21-05-2001 à 15:07:29  profilanswer
 

bin ouais,mais ta variable si elle est statique, le prog ira toujours chercher la valuer au rang i.
Donc yaura pas de random ....

n°33469
kadreg
profil: Utilisateur
Posté le 21-05-2001 à 15:14:41  profilanswer
 

Tu as une variable static seed, qui prend la valeur que tu veux à l'origine. Le srand() sert à lui donner une valeur.
 
Ensuite, le random contient grosso modo :

Code :
  1. nombre random () {
  2.   nombre newSeed = next (seed);
  3.   seed = newSeed;
  4.   return newSeed;
  5. }


Le contenu de next, c'est l'horreur. Tu lui donne un nombre, il
t'en sortira un autre. Le problème étant de faire une fonction qui soit réellement pseudo-aléatoire.
 
Je l'avais vu une fois, j'y ai rien compris :D

 

[edit]--Message édité par kadreg--[/edit]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°33471
petoulachi
A fortiori, brigadier chef
Posté le 21-05-2001 à 15:18:06  profilanswer
 

ouais, c bien ce que je pensais; l'algo est assez complexe....
j'essaye d'en savoir plus !

n°33506
petoulachi
A fortiori, brigadier chef
Posté le 21-05-2001 à 17:28:06  profilanswer
 

Bon j'ai du nouveau: alors apparement;
une suite mathematique est definie. Le plus souvent,cette suite se sert de exponentiel, puis garde tronque le resultat pour obtenir un entier.
Ensuite, pour avoir a chaque fois un nombre different, on accede a l'element i de la suite.
et i est determiné a l'aide du timer !

n°33512
kadreg
profil: Utilisateur
Posté le 21-05-2001 à 17:40:45  profilanswer
 

D'ou tu sors ça que l'élément i est determiné par le timer.
 
Traditionnellement, on fait l'initialisation du seed en lui refilant l'heure (srand time ()), mais ensuite, ca n'intervient plus.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°33515
tfj57
Posté le 21-05-2001 à 18:01:19  profilanswer
 

Les fonctions srand() et rand() de stdlib.h sont définies comme suit (pour VC++ 6.0 : Win32 Console Application) :  
 
int x=1;  
 
void srand(int n)  
{  
     x=n;  
}  
 
int rand()  
{  
      x=x*0x343fd+0x269ec3;  
      return((x>>16)&0x7fff);  
}
 
Comme on peut le voir, ce n'est pas trop compliqué.
 
Salutations

n°33517
petoulachi
A fortiori, brigadier chef
Posté le 21-05-2001 à 18:07:21  profilanswer
 

kadreg, ton seed c mon i ... ton timer ...
tfj57 c sympa, mais là, je comprend vraiment pas pourquoi ça ne renvoie pas le meme nombre a chauqe fois, vu que ya rien qui varie ?

n°33538
BifaceMcLe​OD
The HighGlandeur
Posté le 21-05-2001 à 19:53:26  profilanswer
 

On utilise effectivement une suite de type u(n+1) = (a * u(n) + b ) modulo N, N étant généralement 2^32 ou 2^64, c'est-à-dire contraint par le type entier utilisé.
 
Le tout est de trouver des coefficients a et b qui rendent les termes de cette suite apparemment aléatoires.
 
Et effectivement, ces suites de nombres n'ont rien d'alétoire, c'est d'ailleurs pourquoi on qualifie ce type de générateurs de "pseudo-aléatoires". Ce sont les plus simples et les plus efficaces qu'on ait trouvé jusqu'à présent, mais ils ont aussi un certain nombre de limites. En particulier sur le nombre de tirages qu'ils autorisent.
 
Par exemple, avec le générateur pseudo-aléatoire que l'on trouve dans le C ANSI, c'est un générateur 16-bits. Et il ne convient plus à partir de quelques milliers de tirages, car on se retrouve alors à obtenir des motifs de nombres pseudo-aléatoires qui se répètent. Donc plus du tout aléatoires.
 
Il faut alors changer de générateur pseudo-aléatoire, qui a des limites plus éloignées. Par exemple, le générateur drand48 est assez bon.
 
Voir le topic http://forum.hardware.fr/sqlforum/ [...] warefr.inc pour plus de détails.

mood
Publicité
Posté le 21-05-2001 à 19:53:26  profilanswer
 

n°33583
imhotep03
demain c'est loin...
Posté le 21-05-2001 à 23:12:00  profilanswer
 

le vrai aléatoire n'existe pas en programmation!


---------------
ne rien inscrire en dessous de cette ligne, merci...
n°33587
John74
Posté le 21-05-2001 à 23:49:48  profilanswer
 

imhotep03 a écrit a écrit :

le vrai aléatoire n'existe pas en programmation!




exact, pour "simuler le hasard" on utilise différentes formules mathématiques (il en existe des tas) qui sortent des séries de nombres d'APPARENCES alléatoires. Ce n'est pas parfait mais suffisant pour une utilisation courante
 
le problème c'est que forcément on obtient chaque fois exactement la même série aléatoire... pas pratique :)
 
alors le truc c'est de démarrer la suite de nombres avec une valeur qui est chaque fois différente, et là aussi il existe des tas de solutions, le plus souvent cette première valeur est obtenue en faisant un mix avec l'heure et la date du système, mais bon ça peut varier...
 
d'ailleurs concrètement il existe logiquement deux fonctions pour utiliser une suite aléatoire :
 
si je me souvient bien (?) en pascal par exemple c'est
 
randomize -> initialise la valeur de départ, à n'utiliser qu'une fois
random -> calcule le nombre "aléatoire" suivant de la suite mathématique qui a démarrée avec randomize, à utiliser chaque fois que l'on doit obtenir un nouveau nombre "aléatoire"
 
les noms des fonctions peuvent changer suivant les langages mais c'est toujours le mm principe, j'espère avoir résumé un peu l'ensemble, pour les explications des algo là je laisse parler les professionnels moi j'y comprend rien :)

n°33589
BifaceMcLe​OD
The HighGlandeur
Posté le 22-05-2001 à 00:51:58  profilanswer
 

imhotep03 a écrit a écrit :

le vrai aléatoire n'existe pas en programmation!




En programmation, non, mais en physique, si. Tant que les générateurs aléatoires seront logiciels, on ne pourra parler que de générateurs pseudo-aléatoire, car il ne seront que chaotiques (i.e. apparemment aléatoires, mais en réalité décrits par des équations mathématiques et parfaitement prévisibles dès lors qu'on connait l'ensemble des conditions initiales).
 
Par contre, rien n'empêche un fabricant de processeur d'inclure un générateur aléatoire dans le silicium de sa puce, et là, il peut l'implémenter par un générateur véritablement aléatoire. En se basant sur la physique (et non une suite mathématique).

 

[edit]--Message édité par BifaceMcLeOD--[/edit]

n°33591
John74
Posté le 22-05-2001 à 01:29:10  profilanswer
 

BifaceMcLeOD a écrit a écrit :

 
En programmation, non, mais en physique, si.




oh que non ! si un générateur aléatoire existait en physique cela voudrait dire que l'Univers n'est pas déterministe, et ça on ne sais toujours pas le dire à l'heure actuelle ! ;)
 
mais bon là je chipotte...

n°33592
BifaceMcLe​OD
The HighGlandeur
Posté le 22-05-2001 à 01:49:23  profilanswer
 

On sait quand même que certains événements son indécidables à l'échelle microscopique. C'est même le fondement de la physique quantique...

n°33593
art_dupond
je suis neuneu... oui oui !!
Posté le 22-05-2001 à 02:24:52  profilanswer
 

indécidable ?
 
 
je sais,
 
 
je suis neuneu


---------------
oui oui
n°33594
verdoux
And I'm still waiting
Posté le 22-05-2001 à 02:36:46  profilanswer
 

On pourrait par exemple développer un générateur aléatoire à partir d'un compteur geiger enregistrant des désintégrations (qui suivent une statistique de Poisson).
La théorie physique nous donne la statistique des désintégrations mais nous interdit de prévoir quand chacune aura lieu (c'est vraiment aléatoire).

n°33610
rufo
Pas me confondre avec Lycos!
Posté le 22-05-2001 à 09:08:50  profilanswer
 

en général, ce sont des lois normales qui sont utilisées (le rand du C est faite comme ça je crois). Ensuite, on peut utiliser l'horloge du PC pour initialiser la suite de nb aléatiores afin de ne pas resortir la même suite de nombre...

n°33620
petoulachi
A fortiori, brigadier chef
Posté le 22-05-2001 à 09:31:28  profilanswer
 

ouais, tout ça conforte ce que je disais. Tout le monde a l'air d'accord, donc c cool !
et puis c marrant le debat qui en decoule :)

n°33990
John74
Posté le 23-05-2001 à 12:38:03  profilanswer
 

BifaceMcLeOD a écrit a écrit :

On sait quand même que certains événements son indécidables à l'échelle microscopique. C'est même le fondement de la physique quantique...




Eh oui, au temps pour moi ! merci pour l'info, ça m'évitera de me ridiculiser une autre fois :)
 
effectivement, en mécanique quantique (pas encore prouvée mais bon...) une "particule" pourrait dans certaines conditions allez aussi bien vers la droite que la gauche, pour parler simplement une même cause n'a pas toujours le même effet
 
un véritable générateur aléatoire est donc tout à fait possible (théoriquement) en physique !
 
enfin pour l'instant faut avouer qu'on nage encore "un peu" dans ce domaine !

n°34004
imhotep03
demain c'est loin...
Posté le 23-05-2001 à 13:24:27  profilanswer
 

---> théorème d'incomplétude de Gödel :D
 
Et j'insiste, l'aléatoire programmé n'existe pas!!!
Sinon ce n'est plus de l'aléatoire, puisqu'il suit une loi / formule mathématique ou autre...


---------------
ne rien inscrire en dessous de cette ligne, merci...
n°34204
LeGreg
Posté le 24-05-2001 à 11:01:21  profilanswer
 

moi je remarque juste que windows plante encore de maniere non deterministe :)
 
 
LEGREG

n°34206
n0mad
inscrit au XXe siècle
Posté le 24-05-2001 à 11:25:44  profilanswer
 

En physique l'aléatoire existe : prenez n'importe quel radionuclide avec une durée de demi-vie. La demi-vie est la durée pour laquelle, le radionuclide à 1/2 chance de se désintégrer
 
Si on prend par exemple un isotope de Radium avec une durée de vie de 15E9 d'année (ça existe), il peut très bien se désintégrer au bout d'une seconde. Ca suit une loi poissonienne.


---------------
Pipiru piru piru pipiru pi
n°34215
allergy
bli ? aglapi !
Posté le 24-05-2001 à 14:38:13  profilanswer
 

Pour ceux qui seraient intéressés par les différents algos de pseudo-random : http://www.alrj.org/docs/algo/random.php

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [ALGO] Comment marche une fonction random() ?

 

Sujets relatifs
[Under] En fait ton script pour les bulles d'aides ne marche pas ![C/ALGO] Aidez une tarlouze en algo
[PHP] : Vérification de l'existance d'une fonction[PHP] : Comment appeler une fonction dont le nom est dans une var. ???
(Form HTML) cmt faire un form qui s'adapte tout seul en fonction de ..[JAVA / ALGO ] logiciel de traitement de son
[PHP] Utiliser la fonction array_count_values.un algo de tracage de l'enveloppe d'un son
[PHP] fonction tableauTestez mon programme utilitaire ! il marche c'est garanti !
Plus de sujets relatifs à : [ALGO] Comment marche une fonction random() ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR