2010-09-24 15 views
1

J'ai un fichier d'entrée et la première ligne contient le nombre décimal suivant.La valeur lue dans le fichier est stockée sous une autre valeur dans Fortran

0.5053102074297753 

J'ai un programme Fortran 90 qui lit le fichier et affiche la valeur.

read(*,*) answer 
write(*,"(F20.16)") answer 

C'est la sortie:

0.5053101778030396 

Apparemment, ce qui est stocké n'est pas la même chose que ce qui est lu. La question est, pourquoi?

Répondre

2

Comment la réponse est-elle déclarée? S'il s'agit d'un réel à simple précision, vous ne pouvez vous attendre qu'à environ 6 chiffres décimaux de précision.

De plus, les valeurs sont converties en binaire pour le stockage interne et les calculs. Cela peut provoquer des arrondis et d'autres problèmes, mais la différence ici est trop importante pour que cela en soit la cause.

Pour déclarer réponse en double précision, utilisez ce qui suit:

integer, parameter :: DRK = selected_real_kind (14) 
real (kind=DRK) :: answer 

Cela garantira cette réponse a au moins 14 chiffres décimaux. "DRK" peut être utilisé tout au long de votre programme. Selon votre compilateur, vous pouvez essayer de demander encore plus de chiffres ... il peut fournir un tel type. Rarement est plus que double précision nécessaire.

+0

C'est tout! J'ai complètement oublié la précision. la réponse a été définie comme réelle (type = 4). Merci beaucoup. – blahbaa