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 :
Faites le calcul vous-même... nbx doit être égal à 452.
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);
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 :
... le décalage est de plus en plus important !
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;
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.
Partager