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

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

version 1.1.1.2, 2000/09/09 14:13:12 version 1.1.1.3, 2003/08/25 16:06:35
Line 1 
Line 1 
 /* mpf_mul_ui -- Multiply a float and an unsigned integer.  /* mpf_mul_ui -- Multiply a float and an unsigned integer.
   
 Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc.  Copyright 1993, 1994, 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 23  MA 02111-1307, USA. */
Line 23  MA 02111-1307, USA. */
 #include "gmp-impl.h"  #include "gmp-impl.h"
   
 void  void
 #if __STDC__  
 mpf_mul_ui (mpf_ptr r, mpf_srcptr u, unsigned long int v)  mpf_mul_ui (mpf_ptr r, mpf_srcptr u, unsigned long int v)
 #else  
 mpf_mul_ui (r, u, v)  
      mpf_ptr r;  
      mpf_srcptr u;  
      unsigned long int v;  
 #endif  
 {  {
   mp_srcptr up;    mp_srcptr up;
   mp_size_t usize;    mp_size_t usize;
   mp_size_t size;    mp_size_t size;
   mp_size_t prec = r->_mp_prec;    mp_size_t prec;
   mp_limb_t cy_limb;    mp_limb_t cy_limb;
   mp_ptr rp;    mp_ptr rp;
   
   usize = u->_mp_size;    usize = u->_mp_size;
   size = ABS (usize);    if (usize == 0 || v == 0)
       {
         r->_mp_size = 0;
         r->_mp_exp = 0;
         return;
       }
   
   rp = r->_mp_d;    size = ABS (usize);
     prec = r->_mp_prec;
   up = u->_mp_d;    up = u->_mp_d;
   if (size > prec)    if (size > prec)
     {      {
Line 57  mpf_mul_ui (r, u, v)
Line 56  mpf_mul_ui (r, u, v)
     up++, size--;      up++, size--;
 #endif  #endif
   
   if (size == 0 || v == 0)    rp = r->_mp_d;
     {    cy_limb = mpn_mul_1 (rp, up, size, (mp_limb_t) v);
       r->_mp_size = 0;    rp[size] = cy_limb;
       r->_mp_exp = 0;           /* ??? */    cy_limb = cy_limb != 0;
     }    r->_mp_exp = u->_mp_exp + cy_limb;
   else    size += cy_limb;
     {    r->_mp_size = usize >= 0 ? size : -size;
       cy_limb = mpn_mul_1 (rp, up, size, (mp_limb_t) v);  
       rp[size] = cy_limb;  
       cy_limb = cy_limb != 0;  
       r->_mp_exp = u->_mp_exp + cy_limb;  
       size += cy_limb;  
       r->_mp_size = usize >= 0 ? size : -size;  
     }  
 }  }

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

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