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 :

Fichier *.dll avec des call dans une subroutine.


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut Fichier *.dll avec des call dans une subroutine.
    Bonjour,

    Avec Fortran77, j'ai besoin de générer un fichier *.dll

    Jusqu’à présent avec les lignes de commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -c solution.f
    gfortran -shared -o solution.dll solution.o
    Je parvenais à faire le travail; c'est à dire générer une fichier *.dll sur la base d'une simple subroutine.

    Mais depuis que j'y ai rajouté un appel de fonction : call itime, le résultat attendu est faussé. J'ai l'impression que je dois inclure cette fonction itime lors de la génération du fichier *.dll ...

    Pouvez-vous m'éclairer ?

    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Citation Envoyé par macErmite Voir le message
    Mais depuis que j'y ai rajouté un appel de fonction : call itime, le résultat attendu est faussé..
    Qu'entends-tu par là? Un exemple illustratif serait sûrement utile.

    La routine itime() est intrinsèque donc il n'y a pas de raison de vouloir l'inclure dans ta dll (à moins qu'il n'y ai là une subtilité Windows...)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Pour les besoins d'un programme extérieur, j'ai besoin de générer cette DLL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SUBROUTINE varasub(moyenne, sigma, x, y)
     
          real*8 moyenne, sigma, u, v, ppi, x, y
          real rand
     
          ppi = 3.14159265358979
     
          u = rand()
          v = rand()
     
          x = (sqrt(-2 * log(v))) * cos(2 * ppi * u) * sigma + moyenne
          y = (sqrt(-2 * log(v))) * sin(2 * ppi * u) * sigma + moyenne
     
          RETURN
     
          END
    Mais à chaque appel de cette DLL, la séquence sensé être aléatoire ne l'est pas. Elle me génère la même séquence.

    Je ne suis pas informaticien de formation, si vous pouviez m'apporter votre aide ?

    Merci.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    La fonction rand() ne fait que donner accès à des valeurs pseudo-aléatoires.
    Il est donc normal de retrouver toujours les mêmes valeurs, à moins d'initialiser (au premier appel) le processus avec une graine différente.
    En pratique on obtiendra toujours un programme donnant le même résultat d'une exécution à l'autre si il utilise toujours la même graine.
    Si on veut retrouver un "vrai" comportement aléatoire, alors on peut par exemple initialiser la graine avec l'horloge.

    Un exemple vaut souvent un long discours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
          program test_rand
            integer,parameter :: seed = 86456
            integer :: clockseed
     
            ! Avec une graine "figée":
            print *, rand(seed), rand(), rand(), rand()
            ! On aura les mêmes valeurs que ci-dessus en reprenant la même graine:
            print *, rand(seed), rand(), rand()
     
            ! initialisation de la graine avec l'horloge => résultats différent à chaque exécution du programme
            call system_clock(count=clockseed)
            write(*,*) "clockseed:",clockseed,
         &                 " rand(clockseed)=",rand(clockseed),
         &                 " rand()=",rand()
     
          end program test_rand

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    je ne reconnais pas la syntaxe utilisée un Fortran > à 77 ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Par défaut
    Il y a t il une syntaxe en fortran 77 pour obtenir le même comportement du rand, ou c'est un problème pour cette version de Fortran ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire avec des étoiles dans une zone de texte.
    Par ApocKalipsS dans le forum Langage
    Réponses: 2
    Dernier message: 07/07/2009, 16h08
  2. INSERER DU TEXTE AVEC DES CHAMPS DANS UNE REQUETE SUR sql Srv 2000
    Par sauceaupistou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 10h02
  3. Réponses: 2
    Dernier message: 21/02/2007, 13h28
  4. Réponses: 5
    Dernier message: 12/01/2007, 11h39
  5. Liaison avec des images dans une table
    Par ValérieBruxelles dans le forum Access
    Réponses: 5
    Dernier message: 25/11/2005, 14h21

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