summaryrefslogtreecommitdiff
path: root/cmp_abs.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2003-10-28 16:31:13 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2003-10-28 16:31:13 +0000
commit117edf14c822a22cdd9c25689aeadc904a1a30d1 (patch)
treee39bd61cefc24cc6cfbc5b2b956e4fb36015d111 /cmp_abs.c
parent734c0a144b04e2cae4e67b394010e3f6e3cadecc (diff)
downloadmpfr-117edf14c822a22cdd9c25689aeadc904a1a30d1.tar.gz
Use of MPFR_UNLIKELY and MPFR_IS_SINGULAR for fast detection of special values (Nan, Inf or Zero).
Start to encapsulate the sign to be independant of the reprensation (Must be 1 or -1). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@2525 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'cmp_abs.c')
-rw-r--r--cmp_abs.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/cmp_abs.c b/cmp_abs.c
index 084e6dba2..bd0439e86 100644
--- a/cmp_abs.c
+++ b/cmp_abs.c
@@ -34,18 +34,19 @@ mpfr_cmpabs (mpfr_srcptr b, mpfr_srcptr c)
mp_size_t bn, cn;
mp_limb_t *bp, *cp;
- MPFR_ASSERTN (! MPFR_IS_NAN (b));
- MPFR_ASSERTN (! MPFR_IS_NAN (c));
-
- if (MPFR_IS_INF (b))
- return ! MPFR_IS_INF (c);
- if (MPFR_IS_INF (c))
- return -1;
-
- if (MPFR_IS_ZERO (c))
- return ! MPFR_IS_ZERO (b);
- if (MPFR_IS_ZERO (b))
- return -1;
+ if (MPFR_ARE_SINGULAR (b, c))
+ {
+ if (MPFR_IS_INF (b))
+ return ! MPFR_IS_INF (c);
+ else if (MPFR_IS_INF (c))
+ return -1;
+ else if (MPFR_IS_ZERO (c))
+ return ! MPFR_IS_ZERO (b);
+ else if (MPFR_IS_ZERO (b))
+ return -1;
+ else
+ MPFR_ASSERTN(1);
+ }
be = MPFR_GET_EXP (b);
ce = MPFR_GET_EXP (c);
@@ -56,8 +57,8 @@ mpfr_cmpabs (mpfr_srcptr b, mpfr_srcptr c)
/* exponents are equal */
- bn = (MPFR_PREC(b)-1)/BITS_PER_MP_LIMB;
- cn = (MPFR_PREC(c)-1)/BITS_PER_MP_LIMB;
+ bn = MPFR_LIMB_SIZE(b)-1;
+ cn = MPFR_LIMB_SIZE(c)-1;
bp = MPFR_MANT(b);
cp = MPFR_MANT(c);