Obtenir de vrais nb aleatoire

Soyez le premier à donner votre avis sur cette source.

Vue 10 632 fois - Téléchargée 479 fois

Description

Est-il possible d'écrire un programme qui renvoi de vrais nombre aléatoire (imprévisible, équiprobable, et tout le tralala)? OUI! Comment? En se "servant" d'une source parfaitement aléatoire, extérieure au monde informatique. Ca nécessite bien sûr une "interface" entre le monde physique et le monde informatique. L'interface que j'utilise ici s'appelle random.org...

Source / Exemple :


'*************************************************************************
' TRUERND - Obtenir de VRAIs nombres aléatoire grâce au service random.org
'
' NECESSITE UNE CONNEXION INTERNET
'
'Auteur : Egyde (sendoval_fr@yahoo.fr)
'Date de création : 28/02/06
'*************************************************************************

Option Explicit

Private strmem      As String
Private truernd()   As String

Private Sub Command1_Click()
    'on se connecte à Random.org
    Winsock1.Close
    Text1.Text = ""
    Winsock1.Connect "random.org", 80
End Sub

Private Sub Winsock1_Connect()

    Dim cmd As String

    'raz du buffer de réception
    strmem = ""
    
    'on formate la requête
    cmd = "GET /cgi-bin/randnum?num=" & txtTotalNb.Text & "&min=" & txtSmallest.Text & "&max=" & txtLargest.Text & "&col=1" & vbCrLf & _
          "Accept: text" & vbCrLf & _
          "Referer: http://www.random.org" & vbCrLf & _
          "Host: www.random.org"
    
    'note : le contenu des textbox devrait être vérifiés mais bon...
    
    'envoi de la requête
    Winsock1.SendData cmd
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

    Dim Buffer As String
    Dim Reconnect As Boolean

    Winsock1.GetData Buffer

    strmem = strmem & Buffer

    If IsAllReceived Then
        truernd = Split(strmem, vbLf) ' à convertir en Double éventuellement
        Text1.Text = Replace(strmem, vbLf, vbCrLf)
        strmem = ""
        Winsock1.Close
    End If
       
End Sub

'fonction qui retourne vrai ssi on a reçu tous les nombres aléatoires
Private Function IsAllReceived() As Boolean

    Dim i As Long
    Dim nboccur As Long
    
    'chaque nombre retourné par random.org est séparé par le caractère
    'VbLf. Pour déterminer si la page a été reçu dans son intégralité,
    'on compte simplement le nb d'occurence de ce caractères.
    i = 1
    nboccur = 0
    While InStr(i, strmem, vbLf) > 0
        nboccur = nboccur + 1
        i = InStr(i, strmem, vbLf) + 1
    Wend
    If nboccur = CLng(txtTotalNb.Text) Then
        IsAllReceived = True
    End If

End Function

Conclusion :


Le code proposé ci-dessus fait suite à la discussion très interessante d'une des sources de julien39 :
http://www.vbfrance.com/codes/FONCTION-VRAIMENT-ALEATOIRE_36257.aspx

Les nombres obtenus sont restreint aux entiers. Avec quelques opérations élémentaires, on obtient facilement un équivalent décimal.

Aléatoire ou pas aléatoire? Pour couper court aux débats métaphysiques, je renvoi les utilisateurs interessé à http://www.random.org/essay.html

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
Je remet cent sous dans la machine !
Juste pour dire que, une mesure physique de ce genre (audio, bruit sur une ligne, etc...) même s'il sont très difficile à reproduire ne sont pas pour autant aléatoire (au sens mathématique du terme) ! Ohn est juste dan sle domaine de l'imprévisible. Il y a juste trop de paramètres pour pouvoir être modéliser mathématiquement, mais c'est en théorie possible. On aborde alors le sujet des "théories du chaos".
Il semble qu'il n'existe qu'un moyen de faire du véritable "aléatoire" ... en utilisant les lois de la physique quantique (et encore, tous les physiciens quantiques ne sont pas de cet avis !)En tout cas, c'est ce qui se rapproche le plus de l'aléatoire mathématique : Par exemple, lorsqsu'on lance un photon contre un mirroir semi-transparent selon un angle de 45°, soit le photon traverse le mirroir, soit il est réfléchit par ce même mirroir, repartant à 90° de se direction initiale. Des générateurs de nombres aléatoires fonctionnant sur ce principe existe : http://www.randomnumbers.info/

Mais encor eune fois, tous les physiciens quantiques ne sont pas de cet avis !
Messages postés
3
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
13 mai 2006

Il n'est pas possible de fabriquer 2 capteurs identiques. Ou alors il faudrait s'amuser à les construire atome par atome (et donc de le payer million par million...). Et même là, les differents capteur renverraient des valeurs différentes, dues à l'environnement d'utilisation (celon la température, l'usure du capteur, les champs magnétiques environant, etc... - Le chaos est partout, nous sommes le chaos! ;)). On peut juste "viser" un interval de précision dans lka fabrivation d'un capteur, pour une plage d'utilisation donnée, dans un certain environnement.
Messages postés
258
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
20 février 2008
1
perso je pense qu'un générateur est aléatoire (entre 0 et 1 pour simplifier) si :
1) la suite des nombres générés est équirépartie (i.e : lim Card {k <= n, a <= u(k) <= b} /n -> b - a
(en gros ca dit que la probabilité de la suite de tomber dans un intervalle est proportionnelle à la largeur de l'intervalle)
2) on ne peut pas connaissant u0, u1, ... u(n) deviner u(n + 1)

pour DarkSidious : oui je pense comme toi que mesurer les variations d'un capteur c'est THEORIQUEMENT non aléatoire puisqu'il suffit de s'acheter le même capteur et de le faire fonctionner bien que PRATIQUEMENT à cause des effets chaotiques, ca marche

comme le chaos existe au niveau atomique, on peut cependant supposer qu'il existe une machine permettant de créer des nombres aléatoires. (puisque 2 particules dans le même état strictement ne donneront pas 2 mêmes effets)
Messages postés
161
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
16 juillet 2007

Pour ceux qui n'ont pas l'imagination suffisante pour comprendre l'intérêt de nombres générés de cette façon, il me semble que la citation tirée de rsa.com (le site spécialisé en cryptographie...) éclaire déjà suffisament la question.

Bon, allez, je fais un petit effort :
http://www.random.org/users.html

Ca recense plus de 100 exemples d'utilisations... Des utilisateurs qui expliquent pourquoi ils utilisent random.org (un site web qui existe depuis 1998 tout de même).
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
@Lucyberad
C'est pas toujours une question d'algo de cryptage et de sécurité... Si la fonction de nombres aléatoires n'est pas correcte, tu te retrouveraas soit à cycler, soit à avoir une période de sortie différente pour chaque nombre lors de grands tirages.

@DarkSidious
Désolé, mais je crois que tu en fais un peu trop. Si ton capteur ne peut capter qu'entre -5.00 et +5.00, il captera totu de même des nombres imprévisibles. Le bruit est, par définition, un signal non prévisible.
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.