version 1.1.1.2, 2000/09/09 14:13:12 |
version 1.1.1.3, 2003/08/25 16:06:35 |
|
|
/* mpf_div -- Divide two floats. |
/* mpf_div -- Divide two floats. |
|
|
Copyright (C) 1993, 1994, 1996, 2000 Free Software Foundation, Inc. |
Copyright 1993, 1994, 1996, 2000, 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 24 MA 02111-1307, USA. */ |
|
Line 24 MA 02111-1307, USA. */ |
|
#include "longlong.h" |
#include "longlong.h" |
|
|
void |
void |
#if __STDC__ |
|
mpf_div (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) |
mpf_div (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) |
#else |
|
mpf_div (r, u, v) |
|
mpf_ptr r; |
|
mpf_srcptr u; |
|
mpf_srcptr v; |
|
#endif |
|
{ |
{ |
mp_srcptr up, vp; |
mp_srcptr up, vp; |
mp_ptr rp, tp, rtp; |
mp_ptr rp, tp, rtp; |
Line 39 mpf_div (r, u, v) |
|
Line 32 mpf_div (r, u, v) |
|
mp_size_t rsize, tsize; |
mp_size_t rsize, tsize; |
mp_size_t sign_quotient; |
mp_size_t sign_quotient; |
mp_size_t prec; |
mp_size_t prec; |
unsigned normalization_steps; |
|
mp_limb_t q_limb; |
mp_limb_t q_limb; |
mp_exp_t rexp; |
mp_exp_t rexp; |
TMP_DECL (marker); |
TMP_DECL (marker); |
Line 89 mpf_div (r, u, v) |
|
Line 81 mpf_div (r, u, v) |
|
rtp = tp + (tsize - usize); |
rtp = tp + (tsize - usize); |
} |
} |
|
|
count_leading_zeros (normalization_steps, vp[vsize - 1]); |
|
|
|
/* Normalize the divisor and the dividend. */ |
/* Normalize the divisor and the dividend. */ |
if (normalization_steps != 0) |
if ((vp[vsize-1] & GMP_NUMB_HIGHBIT) == 0) |
{ |
{ |
mp_ptr tmp; |
mp_ptr tmp; |
mp_limb_t nlimb; |
mp_limb_t nlimb; |
|
unsigned normalization_steps; |
|
|
|
count_leading_zeros (normalization_steps, vp[vsize - 1]); |
|
normalization_steps -= GMP_NAIL_BITS; |
|
|
/* Shift up the divisor setting the most significant bit of |
/* Shift up the divisor setting the most significant bit of |
the most significant limb. Use temporary storage not to clobber |
the most significant limb. Use temporary storage not to clobber |