summaryrefslogtreecommitdiff
path: root/gmp_op.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-03-09 11:02:34 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2004-03-09 11:02:34 +0000
commit44b439a1fb233a643bf545d3bf2a35f8faa52b39 (patch)
tree6820b0f2769745a703edca7ab3c895ae61038eee /gmp_op.c
parent21c192ba4df92d1e0d5407e19ba21bfbce5a6603 (diff)
downloadmpfr-44b439a1fb233a643bf545d3bf2a35f8faa52b39.tar.gz
Add `mpfr_cmp_q` and `mpfr_cmp_z`.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@2822 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'gmp_op.c')
-rw-r--r--gmp_op.c51
1 files changed, 39 insertions, 12 deletions
diff --git a/gmp_op.c b/gmp_op.c
index c2df84e23..a2308a891 100644
--- a/gmp_op.c
+++ b/gmp_op.c
@@ -45,7 +45,7 @@ mpfr_div_z (mpfr_ptr y, mpfr_srcptr x, mpz_srcptr z, mp_rnd_t rnd_mode)
MPFR_ASSERTD(res == 0);
res = mpfr_div(y, x, t, rnd_mode);
mpfr_clear(t);
- return(res);
+ return res;
}
int
@@ -53,12 +53,12 @@ mpfr_add_z (mpfr_ptr y, mpfr_srcptr x, mpz_srcptr z, mp_rnd_t rnd_mode)
{
mpfr_t t;
int res;
- mpfr_init2(t, mpz_sizeinbase(z, 2) );
- res = mpfr_set_z(t, z, rnd_mode);
- MPFR_ASSERTD(res == 0);
- res = mpfr_add(y, x, t, rnd_mode);
- mpfr_clear(t);
- return(res);
+ mpfr_init2 (t, mpz_sizeinbase(z, 2) );
+ res = mpfr_set_z (t, z, rnd_mode);
+ MPFR_ASSERTD (res == 0);
+ res = mpfr_add (y, x, t, rnd_mode);
+ mpfr_clear (t);
+ return res;
}
int
@@ -66,12 +66,25 @@ mpfr_sub_z (mpfr_ptr y, mpfr_srcptr x, mpz_srcptr z,mp_rnd_t rnd_mode)
{
mpfr_t t;
int res;
- mpfr_init2(t, mpz_sizeinbase(z, 2) );
- res = mpfr_set_z(t, z, rnd_mode);
+ mpfr_init2 (t, mpz_sizeinbase(z, 2) );
+ res = mpfr_set_z (t, z, rnd_mode);
+ MPFR_ASSERTD (res == 0);
+ res=mpfr_sub (y, x, t, rnd_mode);
+ mpfr_clear (t);
+ return res;
+}
+
+int
+mpfr_cmp_z (mpfr_srcptr x, mpz_srcptr z)
+{
+ mpfr_t t;
+ int res;
+ mpfr_init2 (t, mpz_sizeinbase(z, 2) );
+ res = mpfr_set_z (t, z, GMP_RNDN);
MPFR_ASSERTD(res == 0);
- res=mpfr_sub(y, x, t, rnd_mode);
- mpfr_clear(t);
- return(res);
+ res = mpfr_cmp (x, t);
+ mpfr_clear (t);
+ return res;
}
int
@@ -225,3 +238,17 @@ mpfr_sub_q (mpfr_ptr y, mpfr_srcptr x, mpq_srcptr z,mp_rnd_t rnd_mode)
mpfr_clears(t, q, NULL);
return res;
}
+
+int
+mpfr_cmp_q (mpfr_srcptr x, mpq_srcptr z)
+{
+ mpfr_t t;
+ int res;
+ /* x < a/b ? <=> x*b < a */
+ mpfr_init2 (t, MPFR_PREC(x) + mpz_sizeinbase (mpq_denref(z), 2) );
+ res = mpfr_mul_z (t, x, mpq_denref (z), GMP_RNDN );
+ MPFR_ASSERTD( res == 0 );
+ res = mpfr_cmp_z (t, mpq_numref (z) );
+ mpfr_clear (t);
+ return res;
+}