Souci avec des float et leur précision
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:
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:
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.