PB à toute heure et à tout moment. (à parcourir avec modération)

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

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 21-10-2008 17:50:12

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

[RESOLU] Calcul tout pourri avec des doubles

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)


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#2 21-10-2008 18:01:15

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4685
Pépites: 1,025
Banque: 2,147,483,647
Site web

Re: [RESOLU] Calcul tout pourri avec des doubles

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.


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#3 22-10-2008 14:04:19

FMolinas  
Membre Geek
Lieu: Lyon
Date d'inscription: 12-06-2007
Messages: 87
Pépites: 97
Banque: 6,435,474,948,567

Re: [RESOLU] Calcul tout pourri avec des doubles

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

 

#4 22-10-2008 14:42:04

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Calcul tout pourri avec des doubles

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.


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22