Bonjour à tous,
J’ai un code fortran, assez long et assez complexe (sans être fou non plus), et j’ai un problème de stabilité.
On a remarqué que ces deux lignes ne donnent pas les même résultats finaux.
variable1=variable2/3.0_dp
variable1=variable2*(1.0_dp/3.0_dp)
variable1
et variable 2
sont aussi en double précision. En comparant, il y a parfois une différence dans le dernier chiffre, que j’imagine due à la manière dont l’ordinateur fait les calculs. On parle donc du 16ème chiffre significatif.
variable 1
est ensuite réinjecté dans une autre fonction pour faire des calculs qui impactent tout le reste du code. Les résultats finaux varient au 3ème ou 4ème chiffre significatif. Je me suis donc dit qu’il y avait un problème de stabilité quelque part, des soustractions qui rendent cette différence plus importante, ou que sais-je. Après plus ou moins un jour à chercher, sans succès, j’ai simplement essayé
Cas 1
variable1=variable2/3.0_dp
variable1=variable1*1.0000000000001_dp
Cas 2
variable1=variable2/3.0_dp
variable1=variable1*1.01_dp
Dans les deux cas, les résultats finaux changent mais moins qu’en rajoutant des parenthèses autour de la division par 3. Du coup, je ne comprends pas. Il semblerait qu’il n’y ait pas de super-sensibilité de l’algo (ou peut-être que si quand même), mais il y a quand même quelque chose de très étrange. Toute idée est la bienvenue !
Merci !