Bonjour,

Pour comparer des réels, j'utilise le code présent dans la FAQ, or j'ai un problème concernant la comparaison de nombres de signes différents. En effet, le code me retourne toujours "0". J'ai bien des solutions pour contourner ce problème, mais je souhaitais savoir si ce n'était pas plutôt une erreur de ma part, notamment avec les valeurs d'epsilon ?

Ci-dessous un exemple de code qui me retourne le 0 alors que cela doit être -1

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
int dbl_cmp(double x, double y, double eps_a, double eps_r)
{
    double a, b;
    int ret;
 
    /* On tente tout d'abord une comparaison bit a bit. */
 
    if (x < y)
    {
        a = x;
        b = y;
        ret = -1;
    }
    else if (x > y)
    {
        a = y;
        b = x;
        ret = 1;
    }
    else
        ret = 0;
 
    /* Si x != y, on tente alors une comparaison avec tolerance a l'erreur. */
 
    if (ret != 0)
    {
        /* Si eps_a != 0, l'utiliser. */
 
        if (b - a < eps_a)
        {
            ret = 0;
        }
 
        if (ret != 0)
        {
            /* Si on a encore ret != 0 (i.e. x != y), utiliser eps_r. */
 
            if ((b - a) / a < eps_r)
                ret = 0;
        }
    }
    return ret;
}
 
int main ( int argc, char *argv[] )
{
    double a = -3.50;
    double b = 2.250;
 
    printf("%f %f : %d\n", a, b, dbl_cmp(a,b, 0.001, 0.001));
    return EXIT_SUCCESS;
}