diff options
-rw-r--r-- | TODO | 13 | ||||
-rw-r--r-- | cmp.c | 2 | ||||
-rw-r--r-- | tests/tcmp.c | 16 |
3 files changed, 17 insertions, 14 deletions
@@ -1,6 +1,6 @@ New functions to implement: -- mpfr_swap, mpfr_mul_mpz, mpfr_div_mpz +- mpfr_mul_mpz, mpfr_div_mpz Miscellaneous: @@ -15,14 +15,3 @@ Miscellaneous: - detect overflow/underflow in exponent (from Ben Hinkle <bhinkle4@juno.com>) - specify exponent size (suggestion from Ben Hinkle <bhinkle4@juno.com>) - - - Ya un bug (feature ?) au debut de mpfr_cmp3 : dans le - cas b == 0 on ne prend pas en compte l'argument s. Comme quoi - ca sert de regarder le code droit dans les yeux des fois. - -From: Nathalie Revol <nrevol@ens-lyon.fr> -Date: Thu, 23 Nov 2000 18:01:33 +0100 (MET) - - quand on lit la valeur -1.1 avec une precision 72 et un arrondi - au plus proche et qu'on l'affiche (avec le nb de chiffres a 0 dans - mpfr_get_str pour que les chiffres affiches soient corrects), - on obtient -0.110...08882E1 (15 "0"). Est-il bien utile d'afficher 8882 ? @@ -54,7 +54,7 @@ mpfr_cmp3(b, c, s) mp_limb_t *bp, *cp; if (!MPFR_NOTZERO(b)) { - if (!MPFR_NOTZERO(c)) return 0; else return -(MPFR_SIGN(c)); + if (!MPFR_NOTZERO(c)) return 0; else return -(s*MPFR_SIGN(c)); /*TODO: bug ou feature ? s pas pris en compte... */ } else if (!MPFR_NOTZERO(c)) return MPFR_SIGN(b); diff --git a/tests/tcmp.c b/tests/tcmp.c index c31a2e967..cdaae6b74 100644 --- a/tests/tcmp.c +++ b/tests/tcmp.c @@ -34,7 +34,9 @@ extern int isnan(); int main() { - double x,y; mpfr_t xx,yy; int i,c; + double x, y; + mpfr_t xx, yy; + int i, c; mpfr_init2(xx, 65); mpfr_init2(yy, 65); mpfr_set_str_raw(xx, "0.10011010101000110101010000000011001001001110001011101011111011101E623"); @@ -98,6 +100,17 @@ int main() exit(1); } + mpfr_set_d (xx, 0.0, GMP_RNDN); + mpfr_set_d (yy, 1.0, GMP_RNDN); + if (i = mpfr_cmp3 (xx, yy, 1) >= 0) { + fprintf (stderr, "Error: mpfr_cmp3 (0, 1, 1) gives %d instead of a negative value\n", i); + exit (1); + } + if (i = mpfr_cmp3 (xx, yy, -1) <= 0) { + fprintf (stderr, "Error: mpfr_cmp3 (0, 1, -1) gives %d instead of a positive value\n", i); + exit (1); + } + for (i=0;i<1000000;) { x=drand(); y=drand(); if (!isnan(x) && !isnan(y)) { i++; @@ -110,6 +123,7 @@ int main() } } } + mpfr_clear(xx); mpfr_clear(yy); return 0; } |