summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO13
-rw-r--r--cmp.c2
-rw-r--r--tests/tcmp.c16
3 files changed, 17 insertions, 14 deletions
diff --git a/TODO b/TODO
index ace35486e..4a5ae2539 100644
--- a/TODO
+++ b/TODO
@@ -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 ?
diff --git a/cmp.c b/cmp.c
index ea6d57e62..f4f04d1ad 100644
--- a/cmp.c
+++ b/cmp.c
@@ -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;
}