Lorsque je crée un scalaire INTEGER, s, et que je le passe à un sous-programme, sa valeur est convertie en float et est horriblement inexacte. Par exemple, si je mets s = 2 et CALL print_my_int (s) où il écrira (,) à la console, sa valeur apparaît comme 2.80259693E-45. Les autres entiers scalaires se comportent de la même manière, sauf dans le cas où s = 0, auquel cas la sortie est 0.0000000. Mais même cela est toujours faux, car un entier ne devrait évidemment pas afficher une décimale et une mantisse. Ce n'est pas un problème de format de sortie, car je peux obtenir d'autres entiers à afficher correctement lorsqu'il est affiché localement.Aide! Le passage d'entiers FORTRAN les transforme en flotteurs inexacts?
Une idée de ce qui se passe ici? Ai-je besoin de forcer le type de données d'argument dans la définition de sous-routine? Est-ce faisable?
Exemple de code:
PROGRAM print_int
INTEGER s
s = 2
CALL print_my_int(s)
END PROGRAM print_int
SUBROUTINE print_my_int(x)
WRITE(*,*) x
END SUBROUTINE print_my_int
résultante Sortie:
2.80259693E-45
Cela aurait également fonctionné si vous avez changé le nom du paramètre de 'x' à' i' ou 'j', car FORTRAN a une inférence de type basée sur les caractères initiaux des noms de variables. Mais ne fais pas ça - c'est une mauvaise pratique. – JasonFruit
Merci, monsieur. Un conseil pratique, mais je ferai attention à éviter les mauvaises pratiques. –
Il est bon d'utiliser l'instruction "implicite none" au début de chaque programme/sous-programme si vous voulez que le compilateur s'établisse sur des variables non déclarées. – steabert