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

Diff for /OpenXM_contrib/gmp/mpq/Attic/cmp.c between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:13:04 version 1.1.1.3, 2003/08/25 16:06:34
Line 1 
Line 1 
 /* mpq_cmp(u,v) -- Compare U, V.  Return postive, zero, or negative  /* mpq_cmp(u,v) -- Compare U, V.  Return postive, zero, or negative
    based on if U > V, U == V, or U < V.     based on if U > V, U == V, or U < V.
   
 Copyright (C) 1991, 1994, 1996 Free Software Foundation, Inc.  Copyright 1991, 1994, 1996, 2001, 2002 Free Software Foundation, Inc.
   
 This file is part of the GNU MP Library.  This file is part of the GNU MP Library.
   
Line 25  MA 02111-1307, USA. */
Line 25  MA 02111-1307, USA. */
 #include "longlong.h"  #include "longlong.h"
   
 int  int
 #if __STDC__  
 mpq_cmp (const MP_RAT *op1, const MP_RAT *op2)  mpq_cmp (const MP_RAT *op1, const MP_RAT *op2)
 #else  
 mpq_cmp (op1, op2)  
      const MP_RAT *op1;  
      const MP_RAT *op2;  
 #endif  
 {  {
   mp_size_t num1_size = op1->_mp_num._mp_size;    mp_size_t num1_size = op1->_mp_num._mp_size;
   mp_size_t den1_size = op1->_mp_den._mp_size;    mp_size_t den1_size = op1->_mp_den._mp_size;
Line 43  mpq_cmp (op1, op2)
Line 37  mpq_cmp (op1, op2)
   int cc;    int cc;
   TMP_DECL (marker);    TMP_DECL (marker);
   
     /* need canonical signs to get right result */
     ASSERT (den1_size > 0);
     ASSERT (den2_size > 0);
   
   if (num1_size == 0)    if (num1_size == 0)
     return -num2_size;      return -num2_size;
   if (num2_size == 0)    if (num2_size == 0)
Line 76  mpq_cmp (op1, op2)
Line 74  mpq_cmp (op1, op2)
   
     count_leading_zeros (cnt1, op1->_mp_num._mp_d[num1_size - 1]);      count_leading_zeros (cnt1, op1->_mp_num._mp_d[num1_size - 1]);
     count_leading_zeros (cnt2, op2->_mp_den._mp_d[den2_size - 1]);      count_leading_zeros (cnt2, op2->_mp_den._mp_d[den2_size - 1]);
     bits1 = tmp1_size * BITS_PER_MP_LIMB - cnt1 - cnt2;      bits1 = tmp1_size * GMP_NUMB_BITS - cnt1 - cnt2 + 2 * GMP_NAIL_BITS;
   
     count_leading_zeros (cnt1, op2->_mp_num._mp_d[num2_size - 1]);      count_leading_zeros (cnt1, op2->_mp_num._mp_d[num2_size - 1]);
     count_leading_zeros (cnt2, op1->_mp_den._mp_d[den1_size - 1]);      count_leading_zeros (cnt2, op1->_mp_den._mp_d[den1_size - 1]);
     bits2 = tmp2_size * BITS_PER_MP_LIMB - cnt1 - cnt2;      bits2 = tmp2_size * GMP_NUMB_BITS - cnt1 - cnt2 + 2 * GMP_NAIL_BITS;
   
     if (bits1 > bits2 + 1)      if (bits1 > bits2 + 1)
       return num1_sign;        return num1_sign;
Line 91  mpq_cmp (op1, op2)
Line 89  mpq_cmp (op1, op2)
   /* 3. Finally, cross multiply and compare.  */    /* 3. Finally, cross multiply and compare.  */
   
   TMP_MARK (marker);    TMP_MARK (marker);
   tmp1_ptr = (mp_ptr) TMP_ALLOC (tmp1_size * BYTES_PER_MP_LIMB);    TMP_ALLOC_LIMBS_2 (tmp1_ptr,tmp1_size, tmp2_ptr,tmp2_size);
   tmp2_ptr = (mp_ptr) TMP_ALLOC (tmp2_size * BYTES_PER_MP_LIMB);  
   
   if (num1_size >= den2_size)    if (num1_size >= den2_size)
     tmp1_size -= 0 == mpn_mul (tmp1_ptr,      tmp1_size -= 0 == mpn_mul (tmp1_ptr,

Legend:
Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3

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