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

Fortran Discussion :

nombres aléatoires fortran


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut nombres aléatoires fortran
    Bonjour
    Voici un programme permettant de générer des nombres aléatoires différents à chaque éxécution du programme. Mon problème est que je ne comprends pas ce que fait la ligne "i = rand ( time(1)+time(2)+time(3) )". Je sais que la somme des time additionne en fait les heures, minutes et seconde, mais je ne comprends pas l'affectation à i ; d'autant que quand je fais print*,i avant la boucle, cela me retourne la valeur 0..


    program lab
    IMPLICIT NONE
    real::rand
    integer::i
    integer*4,dimension(3)::time

    call itime(time)
    i = rand ( time(1)+time(2)+time(3) )
    do i = 1, 10
    print *, rand(0)
    end do
    end program



    Merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    les fonctions de génération de nombres aléatoires dépendent pas mal des compilateurs mais ce que je peux te dire avec quasi certitude:

    le premier rand de ton programme permet d'initialiser le "seed" du générateur de nombre aléatoire. amuse toi à supprimer cette ligne et tu verras que les nombres aléatoires générés par ton second rand seront les mêmes à chaque exécution du programme.

    dans ton compilateur ce doit être une fonction qui renvoit une valeur par forcément utile. je pense que tu peux enlever le i= devant ce rand et que ça fonctionnera de la même façon.

    la seule chose qui me surprend un peu c'est que la fonction qui initialise le seed a le même nom que celle qui génère le nombre aléatoire

    elle s'appelle srand sur mon compilateur cette fonction

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut
    avec la commande srand je comprends un peu mieux ce qu'il se passe merci

    voici ce que donne le programme avec srand (en tout cas ce programme marche):


    program lab
    IMPLICIT NONE

    real::rand
    integer::i
    integer*4,dimension(3)::time

    call itime(time)
    call srand ( time(1)+time(2)+time(3) )
    do i = 1, 10
    print *, rand(0)
    end do


    end program

Discussions similaires

  1. nombre aléatoire en fortran
    Par brahim20 dans le forum Fortran
    Réponses: 2
    Dernier message: 09/07/2010, 09h44
  2. Nombres aléatoires
    Par Mat 74 dans le forum Assembleur
    Réponses: 20
    Dernier message: 29/08/2004, 13h31
  3. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 14h20
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

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