version 1.1.1.2, 2000/09/09 14:13:12 |
version 1.1.1.3, 2003/08/25 16:06:35 |
|
|
/* 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; |
|
} |
|
} |
} |