diff options
author | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-03-09 11:02:34 +0000 |
---|---|---|
committer | pelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-03-09 11:02:34 +0000 |
commit | 44b439a1fb233a643bf545d3bf2a35f8faa52b39 (patch) | |
tree | 6820b0f2769745a703edca7ab3c895ae61038eee /gmp_op.c | |
parent | 21c192ba4df92d1e0d5407e19ba21bfbce5a6603 (diff) | |
download | mpfr-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.c | 51 |
1 files changed, 39 insertions, 12 deletions
@@ -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; +} |