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

Diff for /OpenXM_contrib/gmp/mpz/Attic/set_f.c between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:12:57 version 1.1.1.3, 2003/08/25 16:06:33
Line 1 
Line 1 
 /* mpz_set_f (dest_integer, src_float) -- Assign DEST_INTEGER from SRC_FLOAT.  /* mpz_set_f (dest_integer, src_float) -- Assign DEST_INTEGER from SRC_FLOAT.
   
 Copyright (C) 1996 Free Software Foundation, Inc.  Copyright 1996, 2001 Free Software Foundation, Inc.
   
 This file is part of the GNU MP Library.  This file is part of the GNU MP Library.
   
Line 22  MA 02111-1307, USA. */
Line 22  MA 02111-1307, USA. */
 #include "gmp.h"  #include "gmp.h"
 #include "gmp-impl.h"  #include "gmp-impl.h"
   
   
 void  void
 #if __STDC__  
 mpz_set_f (mpz_ptr w, mpf_srcptr u)  mpz_set_f (mpz_ptr w, mpf_srcptr u)
 #else  
 mpz_set_f (w, u)  
      mpz_ptr w;  
      mpf_srcptr u;  
 #endif  
 {  {
   mp_ptr wp, up;    mp_ptr    wp, up;
   mp_size_t usize, size;    mp_size_t size;
   mp_exp_t exp;    mp_exp_t  exp;
   
   usize = SIZ (u);    /* abs(u)<1 truncates to zero */
   size = ABS (usize);  
   exp = EXP (u);    exp = EXP (u);
   
   if (w->_mp_alloc < exp)  
     _mpz_realloc (w, exp);  
   
   wp = w->_mp_d;  
   up = u->_mp_d;  
   
   if (exp <= 0)    if (exp <= 0)
     {      {
       SIZ (w) = 0;        SIZ(w) = 0;
       return;        return;
     }      }
   if (exp < size)  
     MPZ_REALLOC (w, exp);
     wp = PTR(w);
     up = PTR(u);
   
     size = SIZ (u);
     SIZ(w) = (size >= 0 ? exp : -exp);
     size = ABS (size);
   
     if (exp > size)
     {      {
       MPN_COPY (wp, up + size - exp, exp);        /* pad with low zeros to get a total "exp" many limbs */
         mp_size_t  zeros = exp - size;
         MPN_ZERO (wp, zeros);
         wp += zeros;
     }      }
   else    else
     {      {
       MPN_ZERO (wp, exp - size);        /* exp<=size, trucate to the high "exp" many limbs */
       MPN_COPY (wp + exp - size, up, size);        up += (size - exp);
         size = exp;
     }      }
   
   w->_mp_size = usize >= 0 ? exp : -exp;    MPN_COPY (wp, up, size);
 }  }

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

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