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

Diff for /OpenXM_contrib/gmp/mpf/Attic/cmp_ui.c between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:13:13 version 1.1.1.3, 2003/08/25 16:06:35
Line 1 
Line 1 
 /* mpf_cmp_ui -- Compare a float with an unsigned integer.  /* mpf_cmp_ui -- Compare a float with an unsigned integer.
   
 Copyright (C) 1993, 1994, 1995, 1999 Free Software Foundation, Inc.  Copyright 1993, 1994, 1995, 1999, 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 23  MA 02111-1307, USA. */
Line 23  MA 02111-1307, USA. */
 #include "gmp-impl.h"  #include "gmp-impl.h"
   
 int  int
 #if __STDC__  mpf_cmp_ui (mpf_srcptr u, unsigned long int vval)
 mpf_cmp_ui (mpf_srcptr u, unsigned long int vlimb)  
 #else  
 mpf_cmp_ui (u, vlimb)  
      mpf_srcptr u;  
      unsigned long int vlimb;  
 #endif  
 {  {
   mp_srcptr up;    mp_srcptr up;
   mp_size_t usize;    mp_size_t usize;
   mp_exp_t uexp;    mp_exp_t uexp;
     mp_limb_t ulimb;
   
   uexp = u->_mp_exp;    uexp = u->_mp_exp;
   usize = u->_mp_size;    usize = u->_mp_size;
Line 43  mpf_cmp_ui (u, vlimb)
Line 38  mpf_cmp_ui (u, vlimb)
     return -1;      return -1;
   /* We rely on usize being non-negative in the code that follows.  */    /* We rely on usize being non-negative in the code that follows.  */
   
   if (vlimb == 0)    if (vval == 0)
     return usize != 0;      return usize != 0;
   
   /* 2. Are the exponents different (V's exponent == 1)?  */    /* 2. Are the exponents different (V's exponent == 1)?  */
   #if GMP_NAIL_BITS != 0
     if (uexp > 1 + (vval > GMP_NUMB_MAX))
       return 1;
     if (uexp < 1 + (vval > GMP_NUMB_MAX))
       return -1;
   #else
   if (uexp > 1)    if (uexp > 1)
     return 1;      return 1;
   if (uexp < 1)    if (uexp < 1)
     return -1;      return -1;
   #endif
   
   up = u->_mp_d;    up = u->_mp_d;
   
     ulimb = up[usize - 1];
   #if GMP_NAIL_BITS != 0
     if (usize >= 2 && uexp == 2)
       {
         if ((ulimb >> GMP_NAIL_BITS) != 0)
           return 1;
         ulimb = (ulimb << GMP_NUMB_BITS) | up[usize - 2];
         usize--;
       }
   #endif
     usize--;
   
   /* 3. Compare the most significant mantissa limb with V.  */    /* 3. Compare the most significant mantissa limb with V.  */
   if (up[usize - 1] > vlimb)    if (ulimb > vval)
     return 1;      return 1;
   else if (up[usize - 1] < vlimb)    else if (ulimb < vval)
     return -1;      return -1;
   
 #define STRICT_MPF_NORMALIZATION 0  
 #if ! STRICT_MPF_NORMALIZATION  
   /* Ignore zeroes at the low end of U.  */    /* Ignore zeroes at the low end of U.  */
   while (*up == 0)    while (*up == 0)
     {      {
       up++;        up++;
       usize--;        usize--;
     }      }
 #endif  
   
   /* 4. Now, if the number of limbs are different, we have a difference    /* 4. Now, if the number of limbs are different, we have a difference
      since we have made sure the trailing limbs are not zero.  */       since we have made sure the trailing limbs are not zero.  */
   if (usize > 1)    if (usize > 0)
     return 1;      return 1;
   
   /* Wow, we got zero even if we tried hard to avoid it.  */    /* Wow, we got zero even if we tried hard to avoid it.  */

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

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