|
Dernière réponse | |
---|---|
Sujet : [ALGO] Comment marche une fonction random() ? | |
allergy | Pour ceux qui seraient intéressés par les différents algos de pseudo-random : http://www.alrj.org/docs/algo/random.php |
Aperçu |
---|
Vue Rapide de la discussion |
---|
allergy | Pour ceux qui seraient intéressés par les différents algos de pseudo-random : http://www.alrj.org/docs/algo/random.php |
n0mad | 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. |
LeGreg | moi je remarque juste que windows plante encore de maniere non deterministe :)
LEGREG |
imhotep03 | ---> 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... |
John74 |
|
petoulachi | 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 :) |
rufo | 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... |
verdoux | 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). |
art_dupond | indécidable ?
je sais, je suis neuneu |
BifaceMcLeOD | 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... |
John74 |
|
BifaceMcLeOD |
[edit]--Message édité par BifaceMcLeOD--[/edit] |
John74 |
|
imhotep03 | le vrai aléatoire n'existe pas en programmation! |
BifaceMcLeOD | 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. |
petoulachi | 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 ? |
tfj57 | 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 |
kadreg | 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. |
petoulachi | 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 ! |
petoulachi | ouais, c bien ce que je pensais; l'algo est assez complexe....
j'essaye d'en savoir plus ! |
kadreg | 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 :
[edit]--Message édité par kadreg--[/edit] |
petoulachi | bin ouais,mais ta variable si elle est statique, le prog ira toujours chercher la valuer au rang i.
Donc yaura pas de random .... |
BENB | Non, c'est une variable statique je pense... |
petoulachi | 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 ? |