Contexte : Delphi XE7/Windows Seven
Bonjour,
Mon message est relatif à la thématique « gestion des nombres flottants » dans Delphi.
Il se trouve que lors de l’évaluation du code ci-dessous (visiblement assez simple) pour des valeurs « extrêmes » j’obtiens, sur des machines différentes, des comportements différents.
Les machines ont pour nom « SCU58594 » et « scu58576 » les installations Delphi sont (la seule différence est une licence pro pour la première et entreprise pour la seconde) :
En mode debug sur les deux machines/installations Delphi après l’exécution des deux instructions ci-dessus j’obtiens les points de suivi suivants (l’option d’optimisation
est décochée dans les deux cas) :
Les impacts de ces deux comportements différents sont assez important puisque dans le premier cas, la boucle dans laquelle sont ces deux instructions termine alors qu’elle est
infinie dans le deuxième.
Alors, il est certain que la division par (Htfin-HtInit) devrait être interdite si cette différence est très petite, mais je suis quand même surpris d’un comportement différent,
avec un impact important pour des installations somme toutes similaires.
Je suis preneur de références solides et reconnues relatives au bon conditionnement des calculs numériques en Delphi. Je sais qu’en ADA les concepteurs avaient apporté un
très grand soin aux problèmes numériques (en introduisant des types « fixes » et « flottants ») certains s’en sont peut-être inspirés sur des travaux Delphi ?
Le débat est lancé..
Partager