Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nombres aleatoires

Quel est la technique pour trouver un nombre aleatoire ?

Anonyme
    20 novembre 2007 à 18:24:35

    Bonjour à tous

    Quand on conçoit un programme on se rend vite compte que rien est laissé au hasard, rien est aléatoire dans le code vu qu'on l'ecrit une seule et unique fois...
    Récemment je me suis demandé quel etait le fonctionnement des fonctions srand ou rand, comment arrivent-elles à fournir quelques chose qui n'a pas été ecrit à l'avance...

    En bref j'aimerai bien voir le code source d'un programme qui donne un nombre aléatoire sans l'aide des deux fonctions citées plus haut.

    Merci

    PS : Je n'ai pas besoin de la réponse, c'est juste une question de curiosité.

    EDIT : J'ai lu ce tuto Les nombres aleatoires en C fait par Natim.
    C'est tres bien expliqué mais il n'y a pas ce que je recherche c'est à dire un code sans rand ou srand
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2007 à 19:21:38

      Un des générateur les plus utilisés est le générateur à congruence linéaire, introduit par DH Lehmer en 1949. Son fonctionnement se base sur la récurrence suivante:

      1. Xn+1 = (a * Xn + c) mod m


      où a, c et m sont des entiers non négatifs. Cette récurence permet de générer aléatoirement des nombres entre 0 et m-1, lorsque a, c et m sont choisis soigneusement.

      Donald Knuth démontre dans "The Art of Computer Programming, vol. 2" un certains nombre de critères que doivent satisfaires a, c et m et passe en revue un certain nombre de générateurs de référence.

      srand() permet d'initialiser la valeur x0 (premier terme de la suite). La version 2.7 de glibc utilise un générateur un peut plus évolué mais utilise également sur certaines plateforme une générateur à congruence linéaire utilisant les paramètres suivants:

      a = 1103515245
      c = 12345
      m = 2^31

      Thierry
      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2007 à 18:05:30

        Je crois que les nombres aléatoires sont calculés à partir du temps.
        Comme ce n'est jamais le même, puis par une suite de calcul, on arrive au critère désiré (ex, un entier entre 1 et 10)
        • Partager sur Facebook
        • Partager sur Twitter

        Nombres aleatoires

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown