version 1.1.1.2, 2000/09/09 14:13:11 |
version 1.1.1.3, 2003/08/25 16:06:35 |
|
|
/* mpf_add -- Add two floats. |
/* mpf_add -- Add two floats. |
|
|
Copyright (C) 1993, 1994, 1996 Free Software Foundation, Inc. |
Copyright 1993, 1994, 1996, 2000, 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_add (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) |
mpf_add (mpf_ptr r, mpf_srcptr u, mpf_srcptr v) |
#else |
|
mpf_add (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; |
mp_ptr rp, tp; |
Line 48 mpf_add (r, u, v) |
|
Line 41 mpf_add (r, u, v) |
|
/* Handle special cases that don't work in generic code below. */ |
/* Handle special cases that don't work in generic code below. */ |
if (usize == 0) |
if (usize == 0) |
{ |
{ |
mpf_set (r, v); |
set_r_v_maybe: |
|
if (r != v) |
|
mpf_set (r, v); |
return; |
return; |
} |
} |
if (vsize == 0) |
if (vsize == 0) |
{ |
{ |
mpf_set (r, u); |
v = u; |
return; |
goto set_r_v_maybe; |
} |
} |
|
|
/* If signs of U and V are different, perform subtraction. */ |
/* If signs of U and V are different, perform subtraction. */ |
Line 122 mpf_add (r, u, v) |
|
Line 117 mpf_add (r, u, v) |
|
if (ediff >= prec) |
if (ediff >= prec) |
{ |
{ |
/* V completely cancelled. */ |
/* V completely cancelled. */ |
if (tp != up) |
if (rp != up) |
MPN_COPY (rp, up, usize); |
MPN_COPY_INCR (rp, up, usize); |
rsize = usize; |
rsize = usize; |
} |
} |
else |
else |