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;
} |
Partager