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 :

Très petite puissance


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut Très petite puissance
    Bonjour.
    Dans le cadre de mon travail, je dois avoir des variables contenant des très petits nombres : 1E-46. Je m'y connais peu en Fortran, mais ayant créé des variables Real*16, il m'aurait semblé que ca marche or le compilateur (compilateur ifort sous Linux 64bit) me répond :

    warning #7919: The value was too small when converting to REAL(KIND=4); the result is zero. [1E-46]

    Je vous remercie par avance de votre aide

    Cordialement

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,

    J'ai exactement la même configuration que toi (Linux 64bits et ifort) et ca passe en real*16.
    Comment initialises-tu tes variables ? La bonne syntaxe en double (ou quadruple) precision est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    READ(KIND=16) :: x
    x = 1.0D-46
    Par contre, en travaillant si près de l'erreur machine, attend toi à avoir des comportements bizzares.

    Le simple code suivant laisse déja à réfléchir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    READ(KIND=16) :: x , y
    x = 1.0D-46
    y = 1.1D-46
    write(*,*) x
    write(*,*) y
    Avec ifort, tu peux utiliser l'option suivante pour avoir moins de troncatures mais ça ne résoud pas tout :
    -fp-model precise

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut
    Merci pour la réponse,
    Alors j'utilise la chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          REAL(KIND=16) :: WAVE(5000000),INTS(5000000),INTS1(5000000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      DO 3000 BI = 1,NPOINTS,2
       WRITE (2,4000)INTS1(BI)*1E-46,INTS1(BI+1)*1E-46
     
     
     
     
     
    3000   CONTINUE
     
     
     
     
    4000    FORMAT(2(1PE10.3))

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Essaye de mettre des "D" à la place des "E" comme ceci (et partout ailleurs dans le code où tu utilises un format double précision):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WRITE (2,4000)INTS1(BI)*1D-46,INTS1(BI+1)*1D-46
    et tiens moi au courant stp

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 114
    Par défaut
    Bien sur que je te tiens au courant
    Alors tu viens de devenir mon nouveau meilleur ami
    Ca marche super bien !!!
    La science et moi te remercions énormément

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Quelques précisions :
    • une variable real (16) est une variable "quad" précision.
    • La constante 1d-46 est une constante double précision (et non quad).
    • La constante 1q-46 est la version quad de la constante, mais cette forme est non standard.
    • La constante 1e-46_16 est la forme standard quad.

Discussions similaires

  1. Animation Flash de très petite taille
    Par Rodrigue dans le forum Flash
    Réponses: 7
    Dernier message: 20/04/2007, 14h01
  2. [Settings][03]Impression trés petits caractères
    Par mickool_kool dans le forum Outlook
    Réponses: 2
    Dernier message: 10/04/2007, 11h33
  3. [DOM] Petit, trés petit problème de DOM
    Par Clad3 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/12/2006, 20h56
  4. la polices est très petite
    Par hocine dans le forum Windows XP
    Réponses: 1
    Dernier message: 11/12/2006, 15h05
  5. Equivalent Cygwin mais très petit
    Par chris_wafer_2001 dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 22/11/2005, 09h03

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