IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonctionnement de srand() et mt_srand()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut Fonctionnement de srand() et mt_srand()
    Bonjour à tous,
    Récemment je me suis intéressé à la génération de nombres pseudo-aléatoires et une petite question m'est venue alors que je parcourais le manuel PHP.
    On peut y lire :
    Citation Envoyé par php.net/rand
    4.2.0 Le générateur de nombres aléatoires est initialisé automatiquement.
    et :
    Citation Envoyé par php.net/srand
    Depuis la version 4.2.0 Le paramètre seed est devenu optionnel et vaut, par défaut, une valeur aléatoire si omis
    Donc si j'appelle : rand(); derrière le générateur de nombre va être automatiquement initialisé via srand($graine).
    Et $graine va être une valeur aléatoire. Sauf que c'est un cercle vicieux! $graine ne peut pas être calculé via rand(), donc comment est-elle calculée?
    Je vous pose cette question car je n'ai aucune idée d'où aller chercher ma réponse... Peut-on avoir accès aux sources pour directement regarder le code de la fonction srand() (et pareil pour mt_srand()) ?

    Merci à vous,

    ++

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Par défaut rep
    Personnellement je pense que tu ne vas pas trouvé. Car c'est des fonctions faîtes en code machine. Nous, on ne peut que manipuler la fonction, en fonction des paramètres du concepteur.

    c'est idem pour

    md5()
    rand();
    unique(rand());

    C'est quasiment impossible à moins d'être programmeur machine. Donc tu n'auras que les explications pour les faire fonctionner.

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le problème n'est pas limité a PHP.
    Tu peux te documenter plus globalement sur le sujet :
    http://fr.wikipedia.org/wiki/G%C3%A9...l%C3%A9atoires
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut
    Si je posais cette question c'est évidemment que je m'étais documenté. J'ai lu cet article sabotage et pas mal d'autres.

    J'ai finalement réussi à me procurer les sources PHP et j'ai donc pu voir comment se fait le seed.

    @carmen256: détrompe toi, le code source de toutes les fonctions que tu cites est disponible et ouvert à tous!

    ++

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si je posais cette question c'est évidemment que je m'étais documenté
    Je t'invite a participer a des forums sur internet sur n'importe quel sujet (medical, animalier, technique) pour constater que le lien logique entre les deux assertions est plus que faux.

    Qu'a donné ta lecture du code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Par défaut
    L'utilisation de srand() est depuis bien longtemps, obsolète...
    De plus, mt_rand() est toujours mieux que rand() !

    mt_rand() et rand() calcule une valeur aléatoire en fonction du timestamp actuel et de la dernière valeur qu'elles ont renvoyées (d'où l'ex-nécessité de l'initialiser).

    Les sources sont en C, non?

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo