FONCTION VRAIMENT ALÉATOIRE

cs_Elektordi Messages postés 186 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 janvier 2008 - 26 févr. 2006 à 01:01
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 7 juil. 2009 à 14:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36257-fonction-vraiment-aleatoire

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
7 juil. 2009 à 14:29
Je ne sais pas si quelqu'un viendra a nouveau sur cette source tres ancienne mais pour conclure les débats, nous devons constater que la notion de hasard et floue, comme tout les mots du sens commun, chacun d'entre nous a sa propre définition même si les sens sont proches.

En s'arrêtant a la définition donnée du hasard par Emiel Borel : le hasard, ce sont les loins que nous ne connaissons pas, la fonction ici programmée est bien une fonction vraiment aléatoire. Obn peut dire qu'il existe d'autres définistions mais, c'est un autre débat.

Cette fonction a une utilité, elle pourrait servir par exemple a des machines a sous ou a des jeux de hasard qui ont besoin d'avoir des algorithmes tres fiables. PAr conter, elle est nettement plus lente.

Pour terminer, il faut parler des mathématiques, en mathématiques, on définit une variable aléatoire de maniere tres abstraite (pour les statisticiens : image réciproque de tous les boréliens sont des éléments de la tribue associée). On peut donc considérer que les sorties de cette fonction sont bien aléatore en posant un miodèle correctement. Et, les sorties passent le test du Chi deux au niveau 1%, la p valeur est tres correcte. Pour le test de Kolmogorov Smirnov, ce n'est pas possible car en réalité, la varialbe est discrete et Kolmogorov Smirnov ne s'utilise qu'avec des variables à densité continues.
_DoOmy_ Messages postés 15 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 17 septembre 2006
17 sept. 2006 à 14:52
Le hasard n'est pas qu'une notion mathématique, il est aussi une réalité physique (Quantique), il est donc possible de générer une suite entièrement aléatoire, cependant ce moyen n'est pas à la porté de nos ordinateurs actuels. Il est donc clair que pour l'instant un programme "vraiment aléatoire" ne peut exister, toute fonction résultant du calcul pur ne pouvant etre que pseudo-aléatoire. Cependant cette fonction, au même titre que le "Randomize", sont largement suffisante pour les besoins d'un programme simple. En revanche, pour ce qui est de l'expérimentation mathématique, leur utilisation est inacceptable.
Merci de votre attention
yohannc Messages postés 3 Date d'inscription dimanche 19 février 2006 Statut Membre Dernière intervention 22 avril 2008
7 juin 2006 à 22:57
Pour défendre Julien39
Donc voila déjà je me présente vite fais (mon premier post) je suis vraiment un faible en programmation, (j'ai commencé à apprendre à programmer en terminale sur une 10 aine d'heures) et je vais bientôt passer le bac.
Bon passons aux choses sérieuses.
J'ai décidé de créer un générateur de grilles de Sudoku, donc 81 nombre aléatoire de 1 à 9 logiquements. Mon programme c'est du vrai bricolage, et faut en moyenne 7 à 8 secondes pour générer une grille.
J'ai donc eu l'idée d'avoir la possibilité entre clicker sur un boutton pour générer une grille et un autre pour charger une grille dans un fichier texte contenant 10000 grilles. Il m'a donc fallu créer ce fichier text.
Avec randomize timer puis rnd je retrouve 43 ou 44 fois la même grille sur 10000.
En ce sens je trouve que le code de Julien39 est plutôt intéréssant, avec le temps j'imagine que cela me permettrait de ne jamais trouver la même grille, impossible de faire une suite correcte, le pc fait tourner pleins de processus qui ne sont pas régulier (j'ai pas encore testé il va me falloir du temps :) )
A mon goût le petit algorithme de Vb est insuffisant mais utiliser un code avec le temps comme celui de Julien39 l'est.

Enfin voila, mais faut pas me demander de poster une source ici, je n'apporterai rien d'intéréssant (il m'a fallut 700 lignes de code pour que je puisse créer une grille de 81 chiffre en respectant les règles du sudoku et avec randomize timer et rnd)

A+ et ces forum sont super utile, c'est vraiment une bonne aide !
toutancamon Messages postés 2 Date d'inscription samedi 20 novembre 2004 Statut Membre Dernière intervention 23 septembre 2006
3 juin 2006 à 12:02
Au lieu de discuter inutilement sur ce sujet je vous sugère de vous rencontrer et d'en d'écoudre avec des preuves à l'appui.
cs_zifnig Messages postés 16 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 28 mai 2007
10 mars 2006 à 16:21
Un vrai signal aléatoire (en théorie du signal) est un bruit blanc.

En pratique il peut être obtenu en réupérant la tension sur l'émetteur d'un transistor (NPN ou PNP, peut importe) dont la base est en l'air (pas connectée), et en ayant amplifié le signal.

En récupérant le signal de l'entrée micro (non connectée) de la carte son, en l'amplifiant et en récupérant l'amplitude du signal à chaque appel de la fonction, on obtiendra, à priori, un nombre aléatoire (à tester).
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
28 févr. 2006 à 09:12
Et bien je viens d'apprendre quelques choses... et pas des moindres. Merci Gobillot.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
28 févr. 2006 à 08:12
crenaud76>J'ai répondu à ta dernière remarque sur la page que tu cites. Pour aller un peu plus loin : en traitement du signal, le signal utile (la voix par exemple), est toujours additionné avec une composante appelé bruit blanc... Contrairement à l'informatique, le monde électronique est loin d'être binaire!

Cela dit, comme cette source, ce que j'ai proposé est plutôt une "belle figure de style" comme tu l'a dit. Personnellement, je me contente de Randomize+Rnd
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
28 févr. 2006 à 00:04
En guise d'extreme conclusion je dirais, comme l'un d'entre vous l'a noté mais je ne sais plus lequel -il se reconnaitra- :
L'aléatoire n'existe que d'un point de vu mathématique. Dans la réalité, ce que nous appelons le "hasard" n'est que la solution d'un système d'équation dont le nombre d'inconnus est bien trop important, pour que notre esprit puisse se représenter ce système d'équation lui-même. Alors qu'en a en trouver la solution !!! Voila ! Le "Hasard", c'est cela.
Je vous renvoi a toute la littérature qui concerne les théories du chaos -l'effet papillon notament, qui est édifiant !!- car cela correspond exactement à ce dont nous parlons en ce moment.
Notre ami Egyde a déposé un eautre source sur ce sujet -http://www.vbfrance.com/codes/OBTENIR-VRAIS-NB-ALEATOIRE_36293.aspx- ou il se base sur un service fourni par 1 site internet pour obtenir du "VRAI aléatoire". Si j'ai bien compris, ce site se base sur l'ambiance sonore dans une pièce pour donner un nombre aléatoire à un instant T. Cela n'est pas plus "non-reproductible" (=prévisible) que la source ci-dessus : Suffit de refaire exactement le même boucan au même rythme devant le micro et l'affaire est dans le sac.

CR
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 févr. 2006 à 23:52
Pour conclure, je vous propose de nous mettre d'accord sur les points suivant :
1- Le couple Randomize/Rnd fait du pseudo-aléatoire
2- La séquence des nombres est déterminable
3- Cela suffit largement à contenter un programmeur 'de base', ce que nous sommes tous ici
4- Cela fait hurler les mathématiciens 'pointilleux' de nature, quand nous oublions de préciser le "Pseudo-"
5- Le code proposer ne semble pas etre beaucoup plus du goût d'un mathématicien et rebute les programmeurs.
6- Mais c'est une belle figure de style ...

CR
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
27 févr. 2006 à 18:47
correction:
désolé C est une constante:

(X0 * A + C) / M
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
27 févr. 2006 à 18:43
à part la première valeur, oui, on peut retrouver toutes les valeurs qui suivent.
seul un Randomize (ou un Rnd négatif) peut briser la séquence
le premier seed de départ toujours le même pour tout le monde est 327680

fonction de la forme: (X0 * A * C) / M

X0 = 327680
A = 1140671485
C = 12820163
M = 16777216

la partie entière sert de nouveau seed
la partie décimale est le Rnd()

Randomize modifie la valeur X0, mais je sais pas comment.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
27 févr. 2006 à 18:23
Ouai effectivement j'ai survolé le code trop rapidement...
En fait je ne pensais pas que quelqu'un se servait de se parametre. Mais tu as bien fait de me reprendre.

Cela dit, lorsque je fais un Randomize Timer, qui peux prétendre qu'il est capable de determiner à l'avance qu'elle sera la suite des valeurs obtenues ???
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
27 févr. 2006 à 18:20
pas tout à fait
Randomze(1) modifie le seed mais ne donne pas 1 pour seed
Randomize 1: MsgBox Rnd
Randomize 1: MsgBox Rnd
donne 2 valeurs différentes

pour réinitialiser le seed il faut un nombre négatif:
Rnd -1234

à partir d'un seed donné (graine) tous les Rnd() qui suivent donne la même suite. 1677216 valeurs possibles ni plus ni moins.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
27 févr. 2006 à 18:06
Je précise que "Randomize" (sans arguments) est équivalent à "Randomize Timer", ce qui explique qu'en relançant ton prog, tu n'obtiennes pas la même séquence. Maintenant, tu sais le pourquoi du comment du kicékikafékoi...
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
27 févr. 2006 à 17:48
Bouv>Si tu relis bien l'exemple de julien39, tu verras que la syntaxe est : Randomize(1) puis Rnd, ce qui a pour effet d'utiliser 1 pour seed du générateur Rnd. Dans ce cas, séquence identique si tu relances le prog! Donc, je te renvoi la balle :

VRAI et ARCHI-VRAI.
Test toi-même et tu verras!!

D'autre part, si tu mets pas Randomize, Rnd utilise la valeur précédemment généré pour seed. Avec Randomize, tu changes de seed à chaque appel. Et alors??? C'est plutôt positif tout ça :)
Sebast91 Messages postés 2 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
27 févr. 2006 à 16:37
Bonjour,

encore une querelle de mathématiciens.

Mais pourquoi ?

Quel que soit le langage et donc le compilateur ou interpréteur, la fonction de génération doit être déterministe.
Heureusement pour les informaticiens ! Comment reproduire une situation si l'aléatoire "vraiment aléatoire" intervenait !

Tout ceci pour dire qu'il y a un malentendu sur le besoin initial:
Ce programme essaye de nous proposer une solution d'un point de vu mathématique qui ne convient pas aux informaticiens, tandis que la fonction par défaut convient aux informaticiens car déterministe mais pas aux mathématiciens.

Le monde des mathématiques et de l'informatique semblent proches mais les besoins et les objectifs ne sont pas les mêmes.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
27 févr. 2006 à 16:21
PS : Ne confondez pas aléatoire et equiprobable.

"La fonction totalement aléatoire est celle qui donne une décimale du temps d'execution de la procédure"
=> VRAI c'est aléatoire puisque cela depend de la machine, des autres processus qui tournent en même temps.

Est-ce équiprobable ?
=>FAUX puisqu'il faudrait définir une intervalle (meilleur exemple : zero ne sera jamais renvoyé) et que de toute façon les resultat se concentreront sur la moyenne.
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
27 févr. 2006 à 16:11
Je sais pas comment vous faites les gars :

"Si elles sont différentes chez vous, vous pourrez observer qu'elles sont malgré tout toujours identiques quand vous relancer l'application"

FAUX et ARCHI-FAUX.
Faites des tests avant d'avancer un truc pareil.

La suite est la même uniquement si on ne commence pas le prog par un Randomize.

Prenez un feuille mettez un ListBox et placez ce code
Private Sub Form_Load()
Dim i As Integer
Randomize
For i = 0 To 10
List1.AddItem Rnd
Next i
End Sub
Lancez plusieurs fois vous verrez.

Attention je me repettes mais Randomize ne doit être appeler qu'une seule fois au lancement du programme. Si vous utilisez de nouveau Rnd par la suite il ne faut pas rappeler Randomize !
Le mieux est de commencer le programme par un module (Sub Main) et d'appeler Randomize une fois pour toutes !!!
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
27 févr. 2006 à 15:55
J'ai trouvé ça qui devrait t'interesser julien39 :

http://www.pscode.com/vb/scripts/ShowCode.asp?lngWId=1&txtCodeId=58875

Y'a pas de boucle For comme toi mais je te laisse constater que le principe est le même. Lis bien les commentaires en fin de page, c'est très interessant.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
27 févr. 2006 à 15:30
Julien39>Concernant les propos que tu as tiré de MSDN, il est clair qu'un algorithme déterministe peut toujours être prédit.

Dans ton exemple, Randomize(1) suivi de Rnd te renverra effectivement toujours les valeurs que tu as obtenu. C'est un principe de base des générateurs de ce type (voir
http://www.apprendre-en-ligne.net/random/congrulin.html)

Là où je voulais en venir précédemment, c'est que "Randomize Timer" initialise le générateur en prenant pour "germe" la valeur courante de l'horloge. Dans ce cas, à chaque exécution de ton programme, tu obtiendras une séquence différente. Pourquoi donc s'embêter avec ton code (d'autant qu'il ne marche pas en l'état : QueryPerformanceCounter n'est pas déclaré et si on en croit la déclaration de cette API, "TimeStop - TimeStart" est la différence de 2 LARGE_INTEGER, ce que VB ne sait pas faire tout seul).
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 févr. 2006 à 15:04
La fonction totalement aléatoire est celle qui donne une décimale du temps d'execution de la procédure.

Pour la démonstration que jamais une machine ne pourra donner un nombre choisi parmi un ensemble avec une équiprobabilité parfaite je l'accepte si tu le dis.

Par conséquent ma fonction n'est pas totalement aléatoire je te l'accorde.
UniCyclon Messages postés 38 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 14:57
Le hasard mathématique existe. Le hasard pratique non.
Et je t'en prie, trouve-moi une fonction utilisée dans ton programme qui soit totalement aléatoire.

Et une démonstration mathématique existe pour prouver que jamais une machine ne pourra donner un nombre choisi parmi un ensemble avec une équiprobabilité parfaite. Je l'ai assez étudiée pour te l'assurer.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 févr. 2006 à 14:12
- "Maintenant, je te mets au défi de prouver mathématiquement que ton algorithme est plus aléatoire que celui du compilateur VB"

<MSDN> Remarque sur la sécurité Du fait que l'instruction Random et que la fonction Rnd commencent par une valeur initiale et créent des nombres compris dans une plage finie, les résultats peuvent être prévus par toute personne connaissant l'algorithme utilisé pour les créer. L'instruction Random et la fonction Rnd ne doivent donc pas être utilisées pour créer des nombres aléatoires qui seront utilisés en cryptographie.

http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vblr7/html/vafctrnd.asp

Par exemple la fonction Randomize(1) Msgbox(Rnd) donne les valeurs
0,7648737
0,6820141
0,4617513
........
Si elles sont différentes chez vous, vous pourrez observer qu'elles sont malgré tout toujours identiques quand vous relancer l'application.

La question que je vous pose est "Peut on observer la même chose dans mon programme ?"
En bonus je vous donne la réponse NON.
CONCLUSION : mon programme retourne une valeur qui est plus aléatoire que la fonction par défaut.

Je te déconseille malgré tout de l'utiliser pour tes programmes car elle est bien trop lourde et moins pratique que la fonction classique.

- "Au final, je peux te dire que ton algorithme n'est pas équiprobable"
Je suis d'accord pour une centaine d'essais j'ai trouvé des proportions très déséquilibrées, mais je ne sais pas si l'algorithme est équiprobable car il faut tester avec de très grands nombres.
Assez de mauvaise foie, c'est vrai que c'est pas top, mais la comparaison avec la fonction Rnd est à l'avantage du second qui étant programmé pour sortira toujours des valeurs équiprobables.

- "il est trivial de démontrer qu'un algorithme basé sur des fonctions pseudo aléatoires est nécessairement pseudo aléatoire"
Je suis d'accord mais toutes les fonctions que j'utilise ne sont pas pseudo aléatoires.

- "il est idiot de demander à un ordinateur de choisir un nombre aléatoire au sens le plus strict du terme"
Cette assertion n'a pas été démontrée à ma connaissance, on peut le dire mais ce n'est qu'une intuition non une démonstration. On peut dire de même qu'il est idiot de chercher un nombre aléatoire car rien n'est aléatoire, même un lancé de dé, s'il est aléatoire c'est que nous sommes incapables de prévoir quel chiffre va sortir. En réalité le hasard n'existe pas. Mais là nous sommes plus proches de la philosophie que des mathématiques.
UniCyclon Messages postés 38 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 12:23
Clairement pas d'accord.
Déjà, qu'est-ce qu'une fonction réellement aléatoire ? Pour ma part c'est une fonction qui renvoie un nombre X d'un ensemble E choisi au hasard, chaque sortie étant strictement équiprobable. Or il a déjà été démontré mathématiquement qu'il est idiot de demander à un ordinateur de choisir un nombre aléatoire au sens le plus strict du terme. Une des méthodes les plus efficaces est d'obtenir l'heure exacte en microsecondes et d'y appliquer quelques transformations pour garantir une certaine imprédictabilité.

Or, de façon mathématique, il est trivial de démontrer qu'un algorithme basé sur des fonctions pseudo-aléatoires est nécessairement pseudo-aléatoire, et non aléatoire. Au final, je peux te dire que ton algorithme n'est pas équiprobable, et est loin de l'être, et de plus présente une lourdeur non négligeable à l'utilisation dans un programme ayant pour objectif d'être un minimum optimisé.

Maintenant, je te mets au défi de prouver mathématiquement que ton algorithme est plus aléatoire que celui du compilateur VB.
Tant que tu ne l'auras pas fait, je ne vois aucune raison de l'utiliser en raison de sa lourdeur.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
26 févr. 2006 à 21:49
Les fonctions Randomize et Rnd ne sont effet pas vraiment aléatoires parce que régies par un algorithme.

Le fait que je les utilise importe peu car le code n'est pas basé là dessus, je ne l'explique pas plus, il me semle que c'est assez clair dans la source mais si ce n'est pas le cas dites le moi.
J'ai beaucoup hésité à utiliser Rnd parce que cette utilisation pouvait porter à confusion, je me demande si je ne ferait pas mieux de retirer cette fonction du code...
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
26 févr. 2006 à 21:06
Je ne dis pas que l'idée n'est pas bonne. Mais ce qui me gêne, c'est le terme VRAIMENT dans le titre de ta source. Il laisse supposé que les fonctions Randomize et Rnd ne le sont PAS VRAIMENT.
De plus tu utilises ces 2 fonctions dans ta source.
Le résultat attendu est là et c'est très bien, mais...
Bref je pense que tu as compris où je veux en venir.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
26 févr. 2006 à 20:49
La fonction n'apporte rien de plus que la fonction par défaut.
Mais nous sommes dans la catégorie Mathématiques et non Modules, je m'explique : pour un programme ne vous en servez pas, elle est moins pratique et moins rapide. Mais au niveau mathématiques il est interresant de voir comment programmer une fonction donne un nombre qui est réelement aléatoire.

Le fait qu'il soit aléatoire, je ne m'attendais pas à devoir le prouver, c'est relativement simple, on a 2 API qui donne un temps de procédure, les liges For i = 0 To 100000 * Rnd
Next i
servent à faire varier ce temps mais ne sont pas indispenssables, ensuite on choisit chaque décimale une à une de facon pseudo-aléatoire, ainsi on obtient une fonction aléatoire.

Une démonstration Mathématique rigoureuse, je n'en voit pas, il faudrait démontrer qu'il n'existe aucune suite de réels reliant les différents nombres générés, c'est très compliqué, c'est comme vouloir démontrer qu'il n'existe aucune suite reliant les différents résultats d'une épreuve de lancé de dé.

Nous sommes obligés de nous satisfaire de démonstrations qui ne sont pas totalement satisfaisantes. Même les test Chi-2 ou Kolmogorov ne sont pas rigoureux, pour le premier, on admet que la fonction est aléatoire si elle répond à certaines conditions, pour le deuxime, c'est un théoreme qui n'est pas une équivalence, on a SI la variables est aléatoire ALORS la somme...... La deuxieme partie ne prouve pas la premiere mais peut donner des soupcons.
J'ai préferé quelque chose de plus simple la vérification des loi de probabilités ce n'est pas rigoureux mais c'est suffisant je pense.

pour la phrase "reprogramme les fonctions Randomize et Rnd" c'est exactement ce que je fais ????
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
26 févr. 2006 à 17:00
Je confirme, ce code n'apporte rien de plus.

'On se demande pourquoi faire
For i = 0 To 100000 * Rnd
Next i

De plus on l'as dit et répéter au moins 1000 fois : Il est inutile d'appeler Randomize 50 fois (20 fois désolé...).
Une fois au lancement du programme suffit !

Je me repête si tu veux une fonction VRAIMENT aléatoire reprogramme les fonctions Randomize et Rnd.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
26 févr. 2006 à 15:50
Julien39>Je crois que c'est plutôt à toi de prouver le caractère "aléatoire". Pas l'inverse! C'est à TOI de montrer la valeur ajoutée de ton code par rapport à un simple Randomize Timer+Rnd. Tu as des résultats sous la main? Chi-2 ou Kolgomorov peut-être? Je veux dire, c'est pas parce que Windaube est multi-tâche (je pense à ta boucle For...) que statistiquement, les valeurs que tu obtiens sont uniformément distribuées.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
26 févr. 2006 à 13:12
Regarde mieux le code et demande toi si c'est aléatoire ou non puis, si tu trouves que sa ne l'est pas dit le moi et je t'expliquerai pourquoi tu te trompes...
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
26 févr. 2006 à 11:47
Oui, je vois pas ce que cela a de plus aléatoire qu'un simple :
Randomize
Rnd
Puisque c'est bien c'est deux fonctions que tu utilise. Tes petits tours de passe-passe ne servent pas à grand chose à mon avis.
Si tu veux une fonction VRAIMENT aléatoire il te faudra reprogrammer Randomize et Rnd.
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
26 févr. 2006 à 09:40
Random utilise l'arithmétique des congruences. La valeur pseudo-aléatoire obtenue dépend de la "graine" du générateur, qu'il est possible d'initialiser selon l'heure du système par Randomize Timer...
cs_Elektordi Messages postés 186 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 janvier 2008
26 févr. 2006 à 01:01
Plutot que de perdre du temps (ralentir le processus) tu peut te servir du nombre précédant généré (que tu stocke ds une var statique ou publique) pour avoir des nombres tjrs différents...

(exemple:

Alea = TempAlea
if OldAlea = Alea then
Alea = Alea + OldAlea
if Alea > 1 then Alea = Alea -1
end if
OldAlea = Alea

)
Rejoignez-nous