Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/03/2011, à 23:19

samυncle

Générateur de nombre aléatoire (essayez la première version)

Bonjour ou bonsoir (selon votre fuseau) smile.

edit 1: Pour tester le générateur allez ici

http://www.random.org/analysis/dilbert.jpg

J'ai réalisé pour le fun¹ un générateur de nombre aléatoire². Le souci, c'est que je sais pas si c'est vraiment aléatoire (et c'est là toute la difficulté). SI une personne est intéressée à faire des statistiques dessus, j'en serais ravis. Voici un exemple de sortie du générateur.

48d252a5 399277d9 316b03a5 63c6bab9 c6f2b9d2 914f7c61 3211a961 42619e20
fe9d6bb9 128a4e15 dadefb47 b8fd27fb 1ade0ed4 4694e4e2 f28d2682 e937aabe
63037ef2 fc1ade9d 5bd531c8 397f41cb 98817c91 f0505745 0b435b4a a605ed67
f24aae52 53cc3bd8 2384cd10 c009ff74 0f0d01a3 6a852f76 8f57489b 336df904
13cef2db a24f7567 9ecb2fa0 8bb7426f 21c4d743 37a4e9cb 5c35cc8f fff820cd
7eb24a37 bc3de306 8ca7721a 714ccf00 7ea78abe cf4a0bb2 3b25e769 e60dd762
bf241022 f853e3cb 42d3693b 4943594b 7b30c6c2 d45ddcba 4040e967 f799e1c4

La sortie est en hexadécimal, pour des raisons de taille de fichier. C'est plus compact. Bien entendu, sur un si petit échantillon, il est difficile de pouvoir en extraire quelque chose. Donc voici 409600 nombres généré par lui³. Cela à pris environ 3 secondes (je sais pas si c'est rapide ou pas pour un générateur).

_______________________
¹ Je sais que faire un générateur, c'est super compliqué, je n'ai rien de prétentieux, c'est uniquement dans un but didactique smile
² Bien entendu, je n'ai pas utilisé de service en ligne (comme random.org), le générateur est garanti homemade (c)tm
³ Si vous voulez plus de chiffres, je suis ouvert à toute proposition (bien entendu dans la limite du raisonnable wink)

Dernière modification par samuncle (Le 14/04/2011, à 15:03)


Hello world

Hors ligne

#2 Le 15/03/2011, à 23:22

totoflute

Re : Générateur de nombre aléatoire (essayez la première version)

personnellement j'en ai aucune idée, mais par curiosité tu peux montrer le code source de ton générateur s'il te plait ?


Et c'est ça qui fait toute la différence.

Hors ligne

#3 Le 15/03/2011, à 23:30

grim7reaper

Re : Générateur de nombre aléatoire (essayez la première version)

samuncle a écrit :

J'ai réalisé pour le fun¹ un générateur de nombre aléatoire². Le souci, c'est que je sais pas si c'est vraiment aléatoire

Non, ça ne l'est pas.
Ne me remercie pas, ça me fait plaisir smile

Maintenant, je pense que tu veux voir si ton générateur est bien pseudo-aléaoire et là c'est un peu plus compliqué. Je peux te proposer la suite de tests Diehard (je crois qu'il y a moyen de télécharger une implémentation libre ici)

Dernière modification par grim7reaper (Le 15/03/2011, à 23:33)

Hors ligne

#4 Le 15/03/2011, à 23:50

xabilon

Re : Générateur de nombre aléatoire (essayez la première version)

Salut

Je ne crois pas que ce soit possible de savoir, voire de prouver, qu'une suite est véritablement aléatoire.
Tout au plus on pourrait prouver qu'elle ne l'est pas


Pour passer un sujet en résolu : modifiez le premier message et ajoutez [Résolu] au titre.

Hors ligne

#5 Le 16/03/2011, à 00:32

MiNiShOoTeR

Re : Générateur de nombre aléatoire (essayez la première version)

Salut,

je ne suis pas un expert en algorithme, mais il me semble que c'est techniquement impossible pour une machine de générer un nombre aléatoire. Dans le programmes, on utilise généralement la fonction rand() qui renvoi un nombre qu'on considère comme aléatoire. Mais ce nombre n'a rien d'aléatoire, il est basé sur le timestamp. Pour le vérifier, il suffit de faire une boucle très longue qui affiche à chaque fois le résultat de rand(). La boucle va s'exécuter plusieurs fois par seconde et donc dans la suite de nombre obtenu, on pourra constater qu'il y a des séries du même nombre, ça prouve bien que ça n'a rien d'aléatoire !

Hors ligne

#6 Le 16/03/2011, à 00:51

grim7reaper

Re : Générateur de nombre aléatoire (essayez la première version)

MiNiShOoTeR a écrit :

je ne suis pas un expert en algorithme, mais il me semble que c'est techniquement impossible pour une machine de générer un nombre aléatoire.

Exact, c'est pour cela que j'ai répondu à samuncle sans hésiter ^^. Avec des algos on est dans le domaine du pseudo-aléatoire (sauf peut‑être de rares exceptions, j'avoue ne pas être à la pointe en ce qui concerne la littérature à ce sujet).

MiNiShOoTeR a écrit :

Dans le programmes, on utilise généralement la fonction rand() qui renvoi un nombre qu'on considère comme aléatoire. Mais ce nombre n'a rien d'aléatoire, il est basé sur le timestamp.

Faux !
La majorité des gens initialise rand() (du moins en C) via srand() en appelant time(NULL), mais ce n'est pas une obligation (tu peux initialiser ton générateur avec le PID de ton programme ou ce que tu veux). Et là, oui, on a les mêmes suites si on lance le programme plus d'une fois par seconde (mais l'algo ne se base pas sur le timestamp pour autant, c'est juste la graine…).

MiNiShOoTeR a écrit :

Pour le vérifier, il suffit de faire une boucle très longue qui affiche à chaque fois le résultat de rand(). La boucle va s'exécuter plusieurs fois par seconde et donc dans la suite de nombre obtenu, on pourra constater qu'il y a des séries du même nombre, ça prouve bien que ça n'a rien d'aléatoire !

Tu t'es trompé dans ton protocole de test (ou alors le PRNG de ton langage est vraiment à chier O_o).

Dernière modification par grim7reaper (Le 16/03/2011, à 00:52)

Hors ligne

#7 Le 16/03/2011, à 01:48

MiNiShOoTeR

Re : Générateur de nombre aléatoire (essayez la première version)

grim7reaper a écrit :
MiNiShOoTeR a écrit :

Dans le programmes, on utilise généralement la fonction rand() qui renvoi un nombre qu'on considère comme aléatoire. Mais ce nombre n'a rien d'aléatoire, il est basé sur le timestamp.

Faux !
La majorité des gens initialise rand() (du moins en C) via srand() en appelant time(NULL), mais ce n'est pas une obligation (tu peux initialiser ton générateur avec le PID de ton programme ou ce que tu veux). Et là, oui, on a les mêmes suites si on lance le programme plus d'une fois par seconde (mais l'algo ne se base pas sur le timestamp pour autant, c'est juste la graine…).

Je n'ai que peu d'expérience avec le C, et je ne connais pas parfaitement le fonction rand() dans ce cas, mais dans les langages de haut niveau avec lesquels j'ai du travailler (PHP, C# et Java) la fonction rand() est, à ma connaissance, basé sur le timestamp, c'est possible que ce soit également configurable, mais je ne suis jamais posé la question !

MiNiShOoTeR a écrit :

Pour le vérifier, il suffit de faire une boucle très longue qui affiche à chaque fois le résultat de rand(). La boucle va s'exécuter plusieurs fois par seconde et donc dans la suite de nombre obtenu, on pourra constater qu'il y a des séries du même nombre, ça prouve bien que ça n'a rien d'aléatoire !

Tu t'es trompé dans ton protocole de test (ou alors le PRNG de ton langage est vraiment à chier O_o).

J'ai pu constaté ça en C# que j'étudiais en premier semestre. Dans mon code, j'alimentais une liste avec des nombres "aléatoires", et sans une pause de une milliseconde entre chaque, je me retrouvais avec des séquences d'environ 20-25 nombres identiques à la suite.
Après quelques recherches (par curiosité) sur le Web, voici ce que j'ai trouvé de plus intéressant sur le sujet (ça concerne C# principalement là) :

http://www.csharpfr.com/forum/sujet-RANDOM-BOUCLE-DO-WHILE_1223886.aspx a écrit :

En effet, les nombres aléatoires n'éxistent pas en informatique, il n'y a que des nombres pseudo-aléatoires.
La différence, c'est que un Random est en fait comme une fonction mathématique, qui renvoie un nombre en fonction d'un x précis.
Lorsqu'on fait un new Random, il y a un 2ème constructeur qui prend un seed (ou graine en français). Si on précise ce seed, la suite donnée en appelant Next sera toujours la même.
Si on ne précise pas le seed, le constructeur prend comme seed le nombre de millisecondes depuis le démarrage du système (on peut le vérifier facilement avec Reflector).
Donc, si on initialise un Random dans une boucle, et que cette boucle met moins d'une milliseconde pour s'éxécuter, la prochaine itération aura les mêmes valeurs.
Il ne faudrait donc jamais créer une variable Random à l'intérieur d'une boucle.

Donc ça confirme le fait que je me trompe plus haut dans mon post, la fonction rand() du C# n'est pas basé sur le timestamp, et c'est probablement similaire dans les autres langages. Mais le fonctionnement reste le même, à la différence près que la valeur change toutes les millisecondes, ça évite d'attendre trop longtemps pour avoir un nombre différent. Avec le timestamp, logiquement, j'aurais du faire une pause de une seconde, c'est assez énorme si on veut générer beaucoup de nombre ! hmm

Hors ligne

#8 Le 16/03/2011, à 02:07

grim7reaper

Re : Générateur de nombre aléatoire (essayez la première version)

En même temps, c'est stupide d'initialiser un générateur de nombre aléatoire à chaque tour de boucle.
Normalement tu l'initialises un bon coup et après tu appelles rand() (ou Next() en C#, si j'ai bien compris le truc).

Hors ligne

#9 Le 16/03/2011, à 02:59

enrix

Re : Générateur de nombre aléatoire (essayez la première version)

samuncle a écrit :

J'ai réalisé pour le fun¹ un générateur de nombre aléatoire². Le souci, c'est que je sais pas si c'est vraiment aléatoire (et c'est là toute la difficulté). SI une personne est intéressée à faire des statistiques dessus, j'en serais ravis. Voici un exemple de sortie du générateur.

48d252a5 399277d9 316b03a5 63c6bab9 c6f2b9d2 914f7c61 3211a961 42619e20
fe9d6bb9 128a4e15 dadefb47 b8fd27fb 1ade0ed4 4694e4e2 f28d2682 e937aabe
63037ef2 fc1ade9d 5bd531c8 397f41cb 98817c91 f0505745 0b435b4a a605ed67
f24aae52 53cc3bd8 2384cd10 c009ff74 0f0d01a3 6a852f76 8f57489b 336df904
13cef2db a24f7567 9ecb2fa0 8bb7426f 21c4d743 37a4e9cb 5c35cc8f fff820cd
7eb24a37 bc3de306 8ca7721a 714ccf00 7ea78abe cf4a0bb2 3b25e769 e60dd762
bf241022 f853e3cb 42d3693b 4943594b 7b30c6c2 d45ddcba 4040e967 f799e1c4

Tes nombres ne sont pas aléatoire à vu d'œil,

Hors ligne

#10 Le 16/03/2011, à 03:43

ehmicky

Re : Générateur de nombre aléatoire (essayez la première version)

Je crois qu'il est possible d'avoir quelque chose de vraiment aléatoire si on utilise un algo pseudo-aléatoire avec une seed générée aléatoirement grâce à des sensors captant des phénomènes quantiques et non-déterministes, même si l'algo pseudo-aléatoire réduit l'entropie de la seed originelle.
Tu peux utiliser /dev/random pour ça.

Par ailleurs, aléatoire ne veut pas forcément dire "si on en produit plein, ça en met un peu partout". On peut concevoir des générateurs de nombres aléatoires qui se "mappent" sur une distribution non-uniforme (par exemple 75% de chance d'avoir un nombre entre 0 et 100, et 25% de chance d'avoir entre 100 et 200). Même si ça paraît contre-intuitif, le fait que la distribution ne soit pas uniforme ne signifie pas qu'elle est moins aléatoire : cf la séparation entre PRNG et distribution qui est faite dans l'interface de Boost::random.

Si ton but est de faire un générateur pseudo-aléatoire, tu peux tout simplement faire :

cat /dev/urandom

ou même utiliser des hash functions même si c'est moins aléatoire ni efficient :

for i in {1..1000} ; do md5sum <<<$i | head -c+32 ; done

ou utiliser une bibliothèque telle que Boost::random, ou implémenter un algo existant, comme Mersenne-Twister

Sinon un des problèmes avec rand(time(NULL)), c'est ceux qui utilisent le résultat pour un truc de sécurité, parce que si on compte le nombre de secondes depuis Epoch, ça fait que 31 de bits de sécurité (si je me suis pas trompé).

Dernière modification par ehmicky (Le 16/03/2011, à 04:28)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#11 Le 16/03/2011, à 10:15

siden

Re : Générateur de nombre aléatoire (essayez la première version)

il y a aussi des générateurs de nombres aléatoires qui se basent sur le déplacement de la souris.

Hors ligne

#12 Le 16/03/2011, à 10:25

grim7reaper

Re : Générateur de nombre aléatoire (essayez la première version)

ehmicky a écrit :

Sinon un des problèmes avec rand(time(NULL)), c'est ceux qui utilisent le résultat pour un truc de sécurité, parce que si on compte le nombre de secondes depuis Epoch, ça fait que 31 de bits de sécurité (si je me suis pas trompé).

C'est surtout que les fonctions rand() sont à chier dès que tu as besoin d'un aléatoire sérieux (comme pour faire du chiffrement). Mais pour l'utilisation basique que l'on en fait en général c'est suffisant.

Dernière modification par grim7reaper (Le 16/03/2011, à 10:26)

Hors ligne

#13 Le 16/03/2011, à 14:17

Airballman

Re : Générateur de nombre aléatoire (essayez la première version)

Je sais que dans le domaine matériel, on s'approche au plus du générateur de nombre aléatoire en utilisant la température de chauffe d'un composant comme germe.

Pour faire encore mieux, on peut utiliser une solution radioactive tongue, mais c'est un peu plus dur à mettre en place smile

Hors ligne

#14 Le 16/03/2011, à 14:28

ehmicky

Re : Générateur de nombre aléatoire (essayez la première version)

En fait je crois que c'est 100% aléatoire, c'est juste que l'entropie est faible, mais si quelqu'un peut confirmer parce que je suis pas sûr.


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#15 Le 16/03/2011, à 21:52

athel

Re : Générateur de nombre aléatoire (essayez la première version)

grim7reaper a écrit :

Faux !
La majorité des gens initialise rand() (du moins en C) via srand() en appelant time(NULL), mais ce n'est pas une obligation (tu peux initialiser ton générateur avec le PID de ton programme ou ce que tu veux). Et là, oui, on a les mêmes suites si on lance le programme plus d'une fois par seconde (mais l'algo ne se base pas sur le timestamp pour autant, c'est juste la graine…).

Pas tout a fait exact non plus, ce que font la majorité des gens c'est une initialisation avec le timestamp avant chaque appel de rand. Du coup en reinitialisant rapidement le srand avec le meme timestamp, en effet, on se retrouve avec des repetitions. C'est la qu'est le probleme, si tu ne fais qu'un appele a srand, puis des appels en boucle de rand, la boucle aura beau etre rapide, tu n'auras pas deux fois d'affile le meme nombre.

grim7reaper a écrit :
ehmicky a écrit :

Sinon un des problèmes avec rand(time(NULL)), c'est ceux qui utilisent le résultat pour un truc de sécurité, parce que si on compte le nombre de secondes depuis Epoch, ça fait que 31 de bits de sécurité (si je me suis pas trompé).

C'est surtout que les fonctions rand() sont à chier dès que tu as besoin d'un aléatoire sérieux (comme pour faire du chiffrement). Mais pour l'utilisation basique que l'on en fait en général c'est suffisant.

En quoi sont elles a chier? Ce n'est pas que je te contredit, c'est juste que tu le dis sans argument.

Dernière modification par athel (Le 16/03/2011, à 21:55)

Hors ligne

#16 Le 16/03/2011, à 22:36

grim7reaper

Re : Générateur de nombre aléatoire (essayez la première version)

athel a écrit :
grim7reaper a écrit :

Faux !
La majorité des gens initialise rand() (du moins en C) via srand() en appelant time(NULL), mais ce n'est pas une obligation (tu peux initialiser ton générateur avec le PID de ton programme ou ce que tu veux). Et là, oui, on a les mêmes suites si on lance le programme plus d'une fois par seconde (mais l'algo ne se base pas sur le timestamp pour autant, c'est juste la graine…).

Pas tout a fait exact non plus, ce que font la majorité des gens c'est une initialisation avec le timestamp avant chaque appel de rand.

Faut être con pour faire ça -_-". Je ne pense pas que la majorité des gens fassent ça, même les noob ne font pas cette erreur en général…

athel a écrit :

Du coup en reinitialisant rapidement le srand avec le meme timestamp, en effet, on se retrouve avec des repetitions. C'est la qu'est le probleme, si tu ne fais qu'un appele a srand, puis des appels en boucle de rand, la boucle aura beau etre rapide, tu n'auras pas deux fois d'affile le meme nombre.

Oui, c'est bien ce que je dis (c'est MiNiShOoTeR qui disait le contraire).
Moi je dis que tu auras la même suite si tu lances le programme plusieurs fois par seconde (donc rappelle de srand() à chaque fois). Nuance…

grim7reaper a écrit :

En quoi sont elles a chier? Ce n'est pas que je te contredit, c'est juste que tu le dis sans argument.

À chier quand tu as besoin d'un aléatoire costaud, pas à chier tout court (ça suffit dans la majorité des cas)…
Les sources c'est pas ce qui manquent sur le web, donc tu n'as qu'a chercher (et c'est surtout que je n'ai vraiment pas le temps en ce moment hmm)

Hors ligne

#17 Le 16/03/2011, à 23:03

ehmicky

Re : Générateur de nombre aléatoire (essayez la première version)

+1
Je pense que grim7reaper pense à ce genre de choses quand il dit "à chier". En gros nuls pour un usage cryptographique, mais ok pour générer l'expérience des persos de son jeu en C++.


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#18 Le 17/03/2011, à 15:41

Nasman

Re : Générateur de nombre aléatoire (essayez la première version)

Une des principales qualité d'un générateur aléatoire c'est d'offrir la même probabilité de sortie pour tous les nombres, par exemple si tu travailles sur un octet, les valeurs possibles seront comprises entre 0 et 255 et donc que si tu fais 256000 tirages, chaque nombre devrait sortir environ 1000 fois.
Mais ce n'est pas suffisant car les 1000 premiers nombres qui vont commencer à sortir pourraient être des 0 puis les 1000 suivants pourraient être des 1...


PC fixe sous Bionic 64 bits et portable avec Focal 64 bits

Hors ligne

#19 Le 17/03/2011, à 17:14

ehmicky

Re : Générateur de nombre aléatoire (essayez la première version)

Cf ici


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#20 Le 17/03/2011, à 20:19

Xun

Re : Générateur de nombre aléatoire (essayez la première version)

Je m'abonne smile

Xun

Hors ligne

#21 Le 20/03/2011, à 11:30

samυncle

Re : Générateur de nombre aléatoire (essayez la première version)

Pour ceux qui se demandent comment c'est généré, c'est basé sur une image prise par une webcam, enfermée dans un boitier noir. Une LED blanche éclaire une feuille semi transparente, et la webcam film cette feuille. Voici le genre d'image obtenue.
mini_195499random0x11.jpg
Ensuite, on converti les nombres dans une base 92 qui change régulièrement d'ordre, et on hash à grand coup de sha512. Le résultat obtenue est divisé selon la grandeur qu'on veut. C'est ce résultat que vous avez téléchargé. Je connais pas l'efficacité du procédé, mais je pense que c'est pas trop mal. Je suis entrain de préparer une batterie de tests.
* Quels sont les nombres qui apparaissent le plus souvent
* Générer une image, et voir si des motifs apparaissent (normalement ça doit ressembler a du bruit)
* Compter le nombre de nombre pair et impair, plus les deux résultats sont proches, mieux c'est
* Tenter de faire fonctionner le test Diehard

Pour faire encore mieux, on peut utiliser une solution radioactive mais c'est un peu plus dur à mettre en place

Bon alors OK, c'est pas encore la solution radioactive, mais c'est pas mal non ?

Dernière modification par samuncle (Le 20/03/2011, à 11:30)


Hello world

Hors ligne

#22 Le 20/03/2011, à 13:22

Adhémar

Re : Générateur de nombre aléatoire (essayez la première version)

Je suis pas expert, mais je crois que le problème essentiel, c'est de vérifier que les nombres que te donne ton PRNG sont bien distribués comme tu le veux (la plupart des cas, une distrib uniforme sur [0,1]).

Pour cela, tu peux éventuellement essayer un test de Kolmogorov-Smirnov

http://en.wikipedia.org/wiki/Kolmogorov … irnov_test

Hors ligne

#23 Le 21/03/2011, à 05:26

samυncle

Re : Générateur de nombre aléatoire (essayez la première version)

Voilà les premiers résultats. Pour comparer, j'ai pris des nombres de random.org

> filename:  random/001.txt   source:    nukadata
parity test result
  odd:      409783  even:  409417  delta:  366  percent:  0.0447 %
occurrence test result
  0 :    102302     6.244 %
  1 :    102223     6.2392 %
  2 :    102264     6.2417 %
  3 :    102072     6.23 %
  4 :    102173     6.2361 %
  5 :    102508     6.2566 %
  6 :    102231     6.2397 %
  7 :    103099     6.2927 %
  8 :    101995     6.2253 %
  9 :    102302     6.244 %
  a :    102687     6.2675 %
  b :    102374     6.2484 %
  c :    102712     6.269 %
  d :    102564     6.26 %
  e :    102743     6.2709 %
  f :    102151     6.2348 %
 max:  103099  min:  101995  delta:  1104  percent:  0.0674 %

> filename:  random/002.txt   source:    nukadata
parity test result
  odd:      409225  even:  409975  delta:  750  percent:  0.0916 %
occurrence test result
  0 :    102284     6.2429 %
  1 :    102326     6.2455 %
  2 :    102441     6.2525 %
  3 :    102024     6.2271 %
  4 :    102256     6.2412 %
  5 :    102415     6.2509 %
  6 :    102352     6.2471 %
  7 :    102376     6.2485 %
  8 :    102555     6.2595 %
  9 :    102091     6.2311 %
  a :    102514     6.257 %
  b :    102942     6.2831 %
  c :    102825     6.2759 %
  d :    102053     6.2288 %
  e :    102312     6.2446 %
  f :    102634     6.2643 %
 max:  102942  min:  102024  delta:  918  percent:  0.056 %

> filename:  random/003.txt   source:    RANDOM.org
parity test result
  odd:      44964  even:  45036  delta:  72  percent:  0.08 %
occurrence test result
  0 :    18095     10.0528 %
  1 :    18078     10.0433 %
  2 :    17894     9.9411 %
  3 :    17964     9.98 %
  4 :    17868     9.9267 %
  5 :    17951     9.9728 %
  6 :    18194     10.1078 %
  7 :    18078     10.0433 %
  8 :    17842     9.9122 %
  9 :    18036     10.02 %
  a :    0     0.0 %
  b :    0     0.0 %
  c :    0     0.0 %
  d :    0     0.0 %
  e :    0     0.0 %
  f :    0     0.0 %
 max:  18194  min:  17842  delta:  352  percent:  0.1956 %

Pour l'instant 2 tests sont effectués (pair/impair) et l'occurrence de chaque caractère


Hello world

Hors ligne

#24 Le 31/03/2011, à 21:33

samυncle

Re : Générateur de nombre aléatoire (essayez la première version)

Bon j'ai construit un générateur moins homemade que le précédent dans un carton. Les LEDs sont dorénavant alimenté directement par l'USB de la webcam. J'ai aussi rajouté un clignoteur sur les LED à base d'un NE555 pour améliorer l'entropie.

Voici 3 autres tests que j'ai fait:
Occurrence des nombres après plusieurs tirages
1301594970.png
Dispersion
1301599807.png
Et finalement une image générée grâce aux nombres
1301599954.png
(la ligne de couleur unie en bas c'est normal, c'est pour combler le vide)


Hello world

Hors ligne

#25 Le 01/04/2011, à 00:00

samυncle

Re : Générateur de nombre aléatoire (essayez la première version)

Voici un test que j'ai trouvé dans les paquets, Ils s'agit de ENT. J'ai pas encore très bien compris comment interpréter les résultats, mais voilà une comparaison avec random.org

Mon générateur

Value Char Occurrences Fraction
 10            90000   0.333333
 48   0        11254   0.041681
 49   1        11358   0.042067
 50   2        11363   0.042085
 51   3        11388   0.042178
 52   4        11406   0.042244
 53   5        11195   0.041463
 54   6        10987   0.040693
 55   7        11298   0.041844
 56   8        11221   0.041559
 57   9        11156   0.041319
 97   a        11219   0.041552
 98   b        11171   0.041374
 99   c        11166   0.041356
100   d        11469   0.042478
101   e        11157   0.041322
102   f        11192   0.041452

Total:        270000   1.000000

Entropy = 3.584909 bits per byte.

Optimum compression would reduce the size
of this 270000 byte file by 55 percent.

Chi square distribution for 270000 samples is 9330214.51, and randomly
would exceed this value 0.01 percent of the times.

Arithmetic mean value of data bytes is 50.0550 (127.5 = random).
Monte Carlo value for Pi is 4.000000000 (error 27.32 percent).
Serial correlation coefficient is -0.348933 (totally uncorrelated = 0.0).

et random.org

Value Char Occurrences Fraction
 10            90000   0.333333
 48   0        18095   0.067019
 49   1        18078   0.066956
 50   2        17894   0.066274
 51   3        17964   0.066533
 52   4        17868   0.066178
 53   5        17951   0.066485
 54   6        18194   0.067385
 55   7        18078   0.066956
 56   8        17842   0.066081
 57   9        18036   0.066800

Total:        270000   1.000000

Entropy = 3.132897 bits per byte.

Optimum compression would reduce the size
of this 270000 byte file by 60 percent.

Chi square distribution for 270000 samples is 10482111.36, and randomly
would exceed this value 0.01 percent of the times.

Arithmetic mean value of data bytes is 38.3324 (127.5 = random).
Monte Carlo value for Pi is 4.000000000 (error 27.32 percent).
Serial correlation coefficient is -0.493248 (totally uncorrelated = 0.0).

Dernière modification par samuncle (Le 01/04/2011, à 00:19)


Hello world

Hors ligne