[BACK]Return to cmp_abs.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpfr

Annotation of OpenXM_contrib/gmp/mpfr/cmp_abs.c, Revision 1.1.1.1

1.1       ohara       1: /* mpfr_cmp_abs -- compare the absolute values of two nonzero FP numbers
                      2:
                      3: Copyright 1999, 2001 Free Software Foundation, Inc.
                      4:
                      5: This file is part of the MPFR Library.
                      6:
                      7: The MPFR Library is free software; you can redistribute it and/or modify
                      8: it under the terms of the GNU Lesser General Public License as published by
                      9: the Free Software Foundation; either version 2.1 of the License, or (at your
                     10: option) any later version.
                     11:
                     12: The MPFR Library is distributed in the hope that it will be useful, but
                     13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14: or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
                     15: License for more details.
                     16:
                     17: You should have received a copy of the GNU Lesser General Public License
                     18: along with the MPFR Library; see the file COPYING.LIB.  If not, write to
                     19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
                     20: MA 02111-1307, USA. */
                     21:
                     22: #include "gmp.h"
                     23: #include "gmp-impl.h"
                     24: #include "mpfr.h"
                     25: #include "mpfr-impl.h"
                     26:
                     27: /* returns sign(abs(b) - abs(c))
                     28:    b and c must be nonzero real numbers */
                     29:
                     30: int
                     31: mpfr_cmp_abs (mpfr_srcptr b, mpfr_srcptr c)
                     32: {
                     33:   mp_exp_t be, ce;
                     34:   mp_size_t bn, cn;
                     35:   mp_limb_t *bp, *cp;
                     36:
                     37:   MPFR_ASSERTN(MPFR_IS_FP(b) && MPFR_NOTZERO(b));
                     38:   MPFR_ASSERTN(MPFR_IS_FP(c) && MPFR_NOTZERO(c));
                     39:
                     40:   be = MPFR_EXP(b);
                     41:   ce = MPFR_EXP(c);
                     42:   if (be > ce)
                     43:     return 1;
                     44:   if (be < ce)
                     45:     return -1;
                     46:
                     47:   /* exponents are equal */
                     48:
                     49:   bn = (MPFR_PREC(b)-1)/BITS_PER_MP_LIMB;
                     50:   cn = (MPFR_PREC(c)-1)/BITS_PER_MP_LIMB;
                     51:
                     52:   bp = MPFR_MANT(b);
                     53:   cp = MPFR_MANT(c);
                     54:
                     55:   for ( ; bn >= 0 && cn >= 0; bn--, cn--)
                     56:     {
                     57:       if (bp[bn] > cp[cn])
                     58:         return 1;
                     59:       if (bp[bn] < cp[cn])
                     60:         return -1;
                     61:     }
                     62:
                     63:   for ( ; bn >= 0; bn--)
                     64:     if (bp[bn])
                     65:       return 1;
                     66:
                     67:   for ( ; cn >= 0; cn--)
                     68:     if (cp[cn])
                     69:       return -1;
                     70:
                     71:    return 0;
                     72: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>