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 :

Programme avec double précision


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut Programme avec double précision
    Bonjour,
    j'ai écrit ce programme qui calcule la solution d'un système triangulaire supérieur.
    Le problème est que, si j'utilise double précision, je n'obtiens pas des valeurs de A ni de X (A étant la matrice et X le vecteur solution); alors où est le truc ?
    Merci pour votre aide
    Voilà mon programme :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
       program trianglee
                  parameter(n=3)
                  double precision A(n,n),b(n),X(n)
                  integer i,j
                  do i=1,n
                     do j=1,n
                        if((i.lt.j).or.(i.eq.j)) then
                           A(i,j)=float(i*j)
                         else
                           A(i,j)=0.
                         end if
                       enddo
                   enddo
     
                  print 10,((A(i,j),j=1,n),i=1,n)
    10            format('A=',3(/,1X,3(D4.1,1X)))
                  do i=1,n
                     b(i)=1.
                  enddo
                  Call triangle(n,A,b,X)
                  print 20,(X(i),i=1,n)
    20            format('X=',3(D4.1,1X))
                  end
     
                    subroutine triangle(M,C,D,Y)
     
                    integer j,i
                    double precision C(M,M),D(M),Y(M),S
                    Y(M)=D(M)/C(M,M)
                       do i=M-1,1,-1
                          S = 0.
                          do j=i+1,M
                              S=S+C(i,j)*Y(j)
                          enddo
                        Y(i)=(D(i)-S)/C(i,i)
                        enddo
                    return
                    end

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut !

    Tu es vraiment incorrigible.
    1. Tu ignores toujours l'instruction Implicit None.
    2. Tu nous dis que tu ne trouves pas la solution, mais tu ne nous dis pas ce que tu trouves.
    3. Tu écris ((i.lt.j).or.(i.eq.j)) alors que (i.le.j) serait beaucoup plus simple.
    4. Tu utilises un format D4.1 alors que tu n'as manifestement pas compris la signification du 4 et du 1.
    5. Tu ne semble pas avoir encore compris qu'avant d'appeler à l'aide, tu devrais chercher un peu toi-même.
    6. La méthode la plus simple pour déboguer un programme consiste à imprimer suffisamment de résultats intermédiaires.


    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut !

    Tu es vraiment incorrigible.
    1. Tu ignores toujours l'instruction Implicit None.
    2. Tu nous dis que tu ne trouves pas la solution, mais tu ne nous dis pas ce que tu trouves.
    3. Tu écris ((i.lt.j).or.(i.eq.j)) alors que (i.le.j) serait beaucoup plus simple.
    4. Tu utilises un format D4.1 alors que tu n'as manifestement pas compris la signification du 4 et du 1.
    5. Tu ne semble pas avoir encore compris qu'avant d'appeler à l'aide, tu devrais chercher un peu toi-même.
    6. La méthode la plus simple pour déboguer un programme consiste à imprimer suffisamment de résultats intermédiaires.


    Jean-Marc Blanc
    Cher Jean Marc,
    1.Oui je n utilise pas implicit none je ne vois pas son importance
    2.Voila ce que je trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       elarwadi@lmarech3:~$ g77 -o triangle triangle.f
    elarwadi@lmarech3:~$ ./triangle
    A=
     **** **** ****
     **** **** ****
     **** **** ****
    X=**** **** ****
    3. Si je comprends ce que le nombre 4 et le nombre 1 represente:
    si tu as Dw.d alors le w c est le nombre de place desirés et le d est le nombre des nombres apres la virgules
    voila

  4. #4
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Quand je met real a la place de double precision ca marche, mais quand je le remplace par double precision, je tombe dans le truc

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2006
    Messages : 197
    Points : 185
    Points
    185
    Par défaut
    Il faut bien être clair sur l'intérêt du IMPLICIT NONE

    Il oblige à déclarer le type de chaque variable. Sans cela, toutes les variables sont des réel, sauf celles dont la première lettre est entre I et P (il me semble)

    L'un des intérêts :
    Si par exemple tu te trompe dans un nom de variable (ex : tu as une variable "epsilon" et a un moment donné tu écris "epslion"), le compilateur va de mettre un message d'erreur et tu n'auras pas de problème. Si tu n'a pas utilisé implicit none, tu n'auras pas d'erreur de compilation mais une erreur à l'utilisation du programme, et tu auras plus de mail à découvrir le problème.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    je te prie de bien vouloir comprendre l'intérêt du IMPLICIT NONE. Avec moi cela fera trois personnes qui te le diront.

    Merci gregory2526 pour ton explication.

    PS: on ne te dit pas cela pour t'embêter, mais sincèrement, mon boulot consiste en partie à corriger ces genres d'erreurs et c'est la première chose que l'on regarde (et qui nous permet de "juger" le code auquel on a à faire). Mettre un IMPLICIT NONE permet premièrement à la personne qui programme d'être plus claire et sûre sur ce qu'elle veut faire et deuxièmement à une personne qui relit de mieux comprendre le code.

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 09/09/2010, 13h11
  2. précision avec "double"
    Par sylar42 dans le forum C++
    Réponses: 1
    Dernier message: 27/03/2008, 17h17
  3. Problème étrange de précision avec double
    Par titoine1978 dans le forum DirectX
    Réponses: 4
    Dernier message: 22/02/2006, 09h26
  4. Commencer la programmation avec le langage Java ?
    Par von_magnus dans le forum Débuter
    Réponses: 14
    Dernier message: 09/03/2004, 22h19
  5. Réponses: 3
    Dernier message: 27/08/2003, 21h14

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