fortran : Comprendre message d'erreur à l'exéctution
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

fortran : Comprendre message d'erreur à l'exéctution



  1. #1
    Setz

    fortran : Comprendre message d'erreur à l'exéctution


    ------

    Bonjour,

    Lorsqu'en fortran j'exécute le code suivant :

    program test
    implicit none

    real(8), dimension(2) :: y

    y(1) = 1
    y(2) =1

    end program test


    Si j'ai compilé avec les options -ffpe-trap=invalid -finit-real=snan j'obtiens le message qui suit à l'exécution :

    program received signal sigfpe floating-point exception - erroneous arithmetic operation

    Cette erreur n'apparait pas si j'enlève les options de compilation ou si je définis y simplement en real ou en integer. Je ne comprends pas l'origine de l'erreur, quelqu'un a-t-il une explication ?

    Merci

    -----

  2. #2
    Fustigator

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Jamais fait de Fortran mais pour avoir déjà lu des sources (il y a longtemps), il me semble que la déclaration d'un réel de 8 octets c'est
    Code:
    real*8
    (Fortran 77)
    ou
    Code:
    double precision
    pas real(8).

    donc ici on devrait avoir :

    Code:
    double precision,dimension(1:2)::y
    ou
    Code:
    real*8,dimension(1:2)::y


    mais encore une fois, je ne connais pas ce langage sauf "en lecture".
    Dernière modification par Fustigator ; 08/10/2019 à 11h46.

  3. #3
    Setz

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Malheureusement j'ai déjà utilisé real(8) pour déclarer mes variables sans aucun problème. De plus si je n'ajoute pas la ligne où j'affecte la valeur à y aucun problème à l'execution.

    C'est vraiment la déclaration en real(8) associée à ces options de compilations (et seulement dans ce cas) qui renvoie une erreur.

    Merci tout de même pour votre réponse

  4. #4
    Fustigator

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Citation Envoyé par Setz Voir le message
    Malheureusement j'ai déjà utilisé real(8) pour déclarer mes variables sans aucun problème. De plus si je n'ajoute pas la ligne où j'affecte la valeur à y aucun problème à l'execution.

    C'est vraiment la déclaration en real(8) associée à ces options de compilations (et seulement dans ce cas) qui renvoie une erreur.
    Et à quoi servent ces options au fait ?
    Quel compilateur utilisez vous ?

  5. A voir en vidéo sur Futura
  6. #5
    Calvert

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Salut !

    Je n'arrive pas à reproduire avec mon compilateur (gfortran), qui ne me fait ni erreur ni warning à la compilation ou à l'exécution de ton bout de code.

    Ce qui je soupçonne, c'est que, déclarant ton tableau comme de la double précision (au passage, la déclaration comme real(8) est parfaitement valide en fortran 90), et que tu le remplis avec des entiers, il n'aime pas trop. Pour mieux comprendre, tu pourrais essayer

    1. d'ajouter un "." à la fin de tes valeurs, histoire que le compilateur comprenne que ce sont des floats (mais peut-être qu'il ne les interpréterait que comme des simple précision, et donc continuerait de râler)
    2. de forcer l'interprétation en double précision, en remplissant le tableau avec 1.d0 au lieu de 1

    Sait-on jamais...

  7. #6
    Setz

    Re : fortran : Comprendre message d'erreur à l'exéctution

    J'utilise le compilateur gfortran.

    Je n'ai pas pour habitude d'utiliser ces options de compilation (elles étaient inclues dans un code que l'on m'a transmis), mais d'après ce que j'ai compris la première option sert à vérifier qu'aucune opération non permise n'est effectuée, de type racine d'une valeur négative par exemple et la 2e permet d'initialiser de base les variables avec des nan (pour celle là je ne suis pas sûr d'avoir bien compris, à vérifier donc).

  8. #7
    Setz

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Alors si je mets un "." l'erreur est toujours présente, de même si je mets 1.d0.
    Cependant je viens de remarquer que si je mettais real(kind(8)) au lieu de real(8) plus d'erreur.
    Par contre si je mets real(kind = 8) j'ai de nouveau l'erreur.
    De même si je mets real(kind = selected_real_kind(15)) j'ai une erreur, mais en mettant real(kind selected_real_kind(15)) ou real(selected_real_kind(15)) pas d'erreur.

    Et dans tous les cas si j'enlève les 2 options de compilation mentionnées, pas d'erreur.

  9. #8
    Fustigator

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Vous n'avez toujours pas répondu à la question concernant le compilateur que vous utilisez.

  10. #9
    pm42

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Citation Envoyé par Fustigator Voir le message
    Vous n'avez toujours pas répondu à la question concernant le compilateur que vous utilisez.
    Tu as du raté ça :

    Citation Envoyé par Setz Voir le message
    J'utilise le compilateur gfortran.
    Mais c'est vrai qu'il est utile de préciser la version.

  11. #10
    Fustigator

    Re : fortran : Comprendre message d'erreur à l'exéctution

    Citation Envoyé par pm42 Voir le message
    Tu as du raté ça :
    En effet ...

  12. #11
    CM63

    Re : fortran : Comprendre message d'erreur à l'exéctution

    rateraaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/04/2013, 13h20
  2. Fortran : erreur de segmentation.
    Par bengi73 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 18/12/2012, 08h48
  3. Fortran : erreur d'exécution, aidez moi s'il vous plait
    Par invite5b8ffc78 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 12/01/2011, 16h38
  4. erreur 'irrésolue' sous fortran
    Par invitea0f03ccc dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/01/2009, 16h36
  5. Erreur compilation Fortran
    Par invite10295c30 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 01/06/2006, 09h38