Récemment, jai rencontré un problème bizarre avec FORTRAN95. Jai initialisé les variables X et Y comme suit:
X=1.0 Y=0.1
Plus tard, je les additionne et jimprime le résultat:
1.10000000149012
Après avoir examiné les variables, il semble que 0,1 nest pas représenté en double précision avec une précision totale. Y a-t-il un moyen déviter cela?
Réponse
Une autre façon de procéder consiste à dabord spécifier explicitement la précision souhaitée dans la variable à laide de lintrinsèque SELECTED_REAL_KIND , puis à lutiliser pour définir et initialiser les variables. :
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15) REAL(dp) :: x x = 1.0_dp
Un avantage intéressant à faire de cette façon est que vous pouvez stocker la définition de dp
dans un module, puis USE
ce module là où cest nécessaire. Maintenant, si jamais vous voulez changer la précision de votre programme, il vous suffit de modifier la définition de dp
à cet endroit au lieu de rechercher et de remplacer tous les D0
s au fin de vos initialisations de variables. (Cest aussi pourquoi je « recommanderais de ne pas utiliser la syntaxe 1.0D-1
pour définir Y comme suggéré. Cela fonctionne, mais il sera plus difficile de trouver et de modifier toutes les instances à lavenir.)
Cette page du Fortran Wiki donne de bonnes informations supplémentaires sur SELECTED_REAL_KIND
.
Commentaires
Réponse
Vous avez déclaré les variables en double précision, mais vous les avez initialisées avec valeurs de précision simple.
Vous auriez pu écrire:
X=1.0d0 Y=1.0d-1
Barron « s réponse ci-dessous est une autre façon de faire une double précision littérale, avec lavantage de vous permettre de changer la précision de vos variables ultérieurement.
Commentaires
- Je pense que lon devrait utiliser la méthode 1.0_dp décrite dans larticle ci-dessous.
- Je seconde @ OndřejČert í k – La réponse de Barron ' est la meilleure.
_dp
est que la précision est clairement défini de manière portable.