
Envoyé par
mat.M
ça va coûter cher
Tu acceptes les €uros ?

Envoyé par
mat.M
c et d valent 0.80000000000000 mais l'égalité ne se vérifie pas ..

Oui, voilà donc il s'avère que le compilateur de VC++6.0 et de BCB 6.0 fonctionnent de même manière. Sauf que pour un double déclaré comme ça :, le débogage pas-à-pas de VC++ montre 0.80000000000000 et celui de BCB montre 0.8.
Puis l'égalité ne se vérifie pas, effectivement il y'a une approximation (qui est comprehensible car le stockage et manipulation de valeur décimales dans la mémoire n'est pas simple) mais ceci nous n'est pas montrée lors de débogage !
Par contre pour les float la situation est aussi compliquée mais nettement plus claire lors de débogage comme le montre mat.M dans VC++ :

Envoyé par
mat.M
Si on déclare double d = 0.8f;
d vaut 0.80000001192093 en débogage pas-à-pas

Pour être plus clair, si dans BCB 6.0 je déclare un float comme ceci : , le déboggeur de BCB 6.0 me montre que a vaut 0.80000001192 et si j'affiche cette valeur :
ShowMessage( FloatToStr(a) );
je peux voir la valeur effective : 0.800000011920929 car la précision de float en BCB 6.0 est sur 15 chiffres (écrit dans l'aide).
Les questions que je me pose :
- pourquoi il y a une différence entre un float et un double ? (ShowMessage d'un double montre toujours ce qu'on a déclaré càd 0.8 et dans le cas d'addition 0.7+0.1 c'est aussi 0.8 même si l'égalité de deux 0.8 ne se vérifie pas...)
- pourquoi lors de débogage un float 0.8 est montré sur 11 décimales alors que ça valeur réele après l'approximation est sur 15 décimales. Je dois faire un ShowMessage ou Ansistring s = FloatToStr(a); pour voir ça valeur réele. Là on peut parler d'un bug d'affichage dans le débogage pas à pas de BCB 6.0 ...
Partager