Le forum (ô combien francophone) des utilisateurs de Powerbuilder.







Bonjour,
voilà j'ai ldb_1, ldb_2 et ldb_delta
en debug je vois que
ldb_1 = 11,8
ldb_2 = 12,4
je fais ldb_delta = ldb_2 - ldb_1 et j'obtiens...
0,6 ? et ben non... j'obtiens 0,5999999999999996
supaire....
qqun sais pourquoi ?
les valeurs indiquées dans mon post sont celles affichées par le debugger PB
Dernière modification par rincevent (22-10-2008 14:42:17)

Hors ligne
Double
A signed floating-point number with 15 digits of precision and a range from 2.2250738585073E-308 to 1.79769313486231E+308
je me demande juste si "double" est prevu pour les valeurs decimaux.

Hors ligne



Ton problème est malheureusement très classique.
Les types Real et Double sont faits pour faire des calculs sur des nombres ayant une plage de valeurs très étendue. Pour cela, ils utilisent l'arithmétique à virgule flottante, qui est par nécessité imprécise et génère des erreurs d'arrondi. En particulier, extrait de l'article lié ci-dessus :
Wikipedia a écrit:
Pour cette raison, les travaux de comptabilité ne sont pas effectués en virgule flottante, car tout doit tomber juste au centième près. En particulier, la soustraction de deux nombres très proches provoque une grande perte de précision relative : on parle de « cancellation ».
Le type Decimal, quant à lui, est fait pour les calculs exacts sur des nombres à virgule de précision voisine, ce qui semble être ton cas.
Conclusion, passe en Decimal !
Hors ligne







je suis passé en décimal dès que j'ai vu ce problème pour le moins surprenant, merci pour les précisions en tout cas.

Hors ligne