double precision & parameter
Bonjour,
Voici ce que je trouve dans mon code (fortran 77):
Code:
1 2
| DOUBLE PRECISION INFINI, MINFINI, ZERO, EPS, ONE, COEF
PARAMETER (INFINI=1.E+15,ZERO=0.E0,EPS=1.E-50,ONE=1E0,COEF=-0.5E0) |
qui donne un avertissement à la compilation :
Citation:
ifort -fPIC -fpp -warn all -nogen-interface -g -c ALLO.F -o ALLO.o
ALLO.F(88): warning #7919: The value was too small when converting to REAL(KIND=4); the result is zero. [1.E-50]
PARAMETER (INFINI=1.E+15,ZERO=0.E0,EPS=1.E-50,ONE=1E0,COEF=-0.5E0)
---------------------------------------------^
Comme c'est très bien expliqué dans la faq, le compilateur semble ici considérer que EPS est un REAL (donc compris entre 1e-32 et 1e32).
J'en déduis que ce qu'on met dans dans PARAMETER est par défaut un REAL malgré la déclaration de la ligne du dessus.
Voyez-vous comment exiger qu'il soit considéré comme un double precision ?
Pensez-vous que cette façon de faire du compilateur sera identique avec tous les compilateurs ? je demande ça car bizarrement je ne vois aucun message d'avertissement sous windows (compilateur intel).
Par contre gfortran fait le même genre d'avertissement.
Citation:
gfortran -fPIC -x f77-cpp-input -Wall -O -funroll-all-loops -c ALLO.F -o ALLO.o
ALLO.F:88.51:
PARAMETER (INFINI=1.E+15,ZERO=0.E0,EPS=1.E-50,ONE=1E0,COEF=-0.5E0)
1
Warning: Real constant underflows its kind at (1)
Merci !