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 :

rand() pour ifort


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Par défaut rand() pour ifort
    Bonjour,
    j'ai récupéré un projet en fortran 77, que je compile avec gfortran (linux). Je voudrais (par curiosité intellectuelle et aussi car le débogueur est parait-il meilleur) le compiler avec ifort.
    Mais voilà qu'avec ifort j'ai une erreur à cause d'une fonction rand() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    utils/UTR.F(62): error #6404: This name does not have a type, and must have an explicit type.   [RAND]
          x1 = rand(s)
    J'ai lu que le fortran 77 n'avait pas de standard en ce qui concerne la génération de pseudo-aléatoire, je pense donc que ça vient de là : confirmez-vous et que me conseilleriez-vous ?
    Merci !

    ps : voici le code de la fonction

    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
          DOUBLE PRECISION FUNCTION rn()
          IMPLICIT NONE
          DOUBLE PRECISION x1, x2, PI2, EPS
          PARAMETER ( PI2 = 6.283185307d0, EPS=1.d-15  )
          INTEGER init_seed_linux, s   
          EXTERNAL init_seed_linux
          INTRINSIC SQRT, LOG, COS
     
          s = init_seed()           
          x1 = rand(s)
          DO WHILE (x1 .LT. EPS)
             x1 = rand()
          ENDDO
          x2 = rand()
          rn = SQRT(-2.0*LOG(x1))*COS(PI2*x2)
          RETURN
          END

  2. #2
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Bonjour

    J'ai lu que le fortran 77 n'avait pas de standard en ce qui concerne la génération de pseudo-aléatoire,
    Exact. Ceci dit, certains éditeurs (Lahey Fortran par exemple, de mémoire) en proposent un.

    que me conseilleriez-vous ?
    D'en écrire un. Voici par exemple un petit tout simple que j'ai utilisé il ya quelques années.

    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
    18
    19
     
         FUNCTION RANDOM (N0)
     
    C- On initialise N0 a une valeur quelconque ENTIERE 
    C-RANDOM renvoie un REEL compris entre 0.0 et 1.0
     
          REAL      RANDOM
          INTEGER   N0, K, CONST1, CONST2, CONST3, CONST4
          PARAMETER (CONST1 = 127773)
          PARAMETER (CONST2 = 16807)
          PARAMETER (CONST3 = 2836)
          PARAMETER (CONST4 = 2147483647)
     
          K = N0 / CONST1
          N0 = CONST2 * (N0 - K * CONST1) - K * CONST3
          IF (N0 .LT. 0) N0 = N0 + CONST4
          RANDOM = REAL(N0) / REAL(CONST4)
     
          END
    Tu peux en trouver de plus complexes sur http://www.fortran.com/ dans la rubrique Tools, Libraries

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 76
    Par défaut
    Merci !

  4. #4
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Bonjour

    je viens de découvrir - par hasard - une autre solution.

    Le compilateur g95 http://www.g95.org
    qui tourne sous Windows, Mac OS X, Linux, Solaris, propose RAND dans ces fonctions intrinsèques supplémentaires.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/07/2014, 17h03
  2. Quel algorithme pour rand ?
    Par Sebsheep dans le forum C
    Réponses: 5
    Dernier message: 12/01/2010, 16h39
  3. [Tableaux] rand pour un tableau
    Par avogadro dans le forum Langage
    Réponses: 2
    Dernier message: 11/12/2006, 15h26
  4. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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