RealRandom est un programme complet de génération de nombres pseudo-aléatoires.
"Encore un? " allez vous me dire...
Et bien, en fait, celui là est un peu particulier ;)!
Déjà, il est mon points de vue du fonctionnement de la fonction Ran#.
Ensuite, il permet de "simuler" un reset complet de la calculatrice et un démarage de cette dernière.
Pourquoi? Par ce que, toujours selon moi, ces deux événements sont les seuls a influencer la fonction Ran# :D!
Enfin, mon programme utilise un algorithme (qui n'est pas de moi, je tient a le signaler quand même ) dit "Standard Minimal" des générateurs "congruentiels linéaires" (la méthode de génération de ces nombres la plus utilisée).
Son algorithme est donc le suivant : (petit copier/coller, honte à moi >_<' )
Xn+1 = 16807 * Xn % (2^31- 1)
Xn étant le nombre dernièrement généré, et Xn+1 le nombre qui va être généré.
A, et aussi, "%" est le symbol du "modulo", une opération de base des ordi, mais pas des calto >_<'.
En fait, X%Y va nous donner le reste de la division euclidienne de X par Y; (15%6 va donner 3, car 6*2 +3).
Et son équivalent Basic Casio est :
X-(Y*Int (X/Y))
Cet algorithme a été vérifié, et on a prouvé qu'il sortirait tous les nombre de 1 à 2^31-2 inclus une fois par cycle (un cycle de 2^31-2, donc, ce qui est pas mal tout de même ). Il les sort aussi d'une manière pseudo-aléatoire, et de manière équiprobabiliste >_<'...
Enfin, bref, pour finir les explications, mon programme divise le nombre obtenu par 2^31-2 afin d'avoir, comme la fonction Ran#, un nombre compris entre 0 et 1.
RealRandom utilise le temps d'appui sur la touche [EXE] -vous verrez vous-même où :D- pour initialiser après un démarrage. Donc même en faisant un "reset total" du programme (je signale au passage que cette fonction met juste la matrice A [1,1] à 60, et qu'elle ne reset pas réellement la calto >_<' ), le nombre ne sera pas forcement le même a chaque fois :E!
Le Basic n'est pas assez rapide pour compter précisément le temps durant lequel on a appuyé, mais la calto, en interne, pourrait faire ça (donc mon explication est assez réaliste ).
Bon, et puis, vous verrez par vous même :D!
Après ce petit message *sort*, vous pouvez enfin tester, et voir cette petite merveille d'équilibre et d'aléatoire >_<'!
C'est sympa, ça fonctionne ... presque bien ^^.
Le problème c'est que les gens restent pas plus ou moins longtemps appuyés sur une touche, c'est pas précis du tout en basic la gestion du temps d'appui
J'ai beau faire exprès de ne pas faire attention à comment j'appuie, j'appuie toujours pareil, il faut que j'me mette à faire exprès d'appuyer différemment à chaqe fois pour que ça fonctionne ^^.
Cela dit l'idée est bonne, et en C cela serait parfait je pense ^^, mais bon là
Ouip, c'est sûr que là, je doit être précis à peut près au dizième de seconde près (donc faut vraiment le vouloir, comme tu dis, pour avoir des temps différents >_<').
En C, je pense que la précision doit être jusqu'à la µs (à 1Mhz, il faut 1microseconde (µs, a ne as confondre avec milliseconde -ms-) par instructions... donc on doit pas être loin de ça ;)!
Après, mon programme, c'était surtout pour voire si mon hypothèse était réaliste ...
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd