Bonjour,

Je m'arrache les cheveux sur une appli depuis quelques heures pour un souci de précision de float...

En simplifiant au maximum mon code, voici le test que j'effectue :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
float xmin, xmax, precision;
int nbx;
 
xmin = 599.4;
xmax = 689.8;
precision = 0.2;
 
nbx = ((xmax-xmin)/precision);
Faites le calcul vous-même... nbx doit être égal à 452.
Or le débogueur me retourne 451 !!!

En remplaçant nbx par un float, j'obtiens 451.999981689
On se rapproche de ce que je suis en mesure d'attendre, mais si je commence à faire des boucles de ce type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
float x;
float *result = new float[nbx];  // Je suis obligé d'utiliser un int pour mon nbx dans ce cas là !
int p;
 
p = 0;
for(x=xmin;x<=xmax;++x)
{
   result[p] = x;
   ++p;
}
 
delete[] result;
... le décalage est de plus en plus important !

Comment corriger ce type de problème ?

A noter que je me suis amusé également avec des double. Le souci est le même, évidemment ! Je connais le problème de la précision des réels, tels qu'ils sont codés sur x bits, mais j'aimerais un peu m'en affranchir ! Comment faites-vous dans ce genre de cas ?

Merci par avance.