diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2001-09-11 03:20:42 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2001-09-11 03:20:42 +0000 |
commit | 3ebba522c3a4e2e338e318a6315bd2c62947859e (patch) | |
tree | 5a5188c9776f2e92501f4abdd203de11ee22809e /set.c | |
parent | e8b8e6a47cde2cdc77d251359a63647b3103006b (diff) | |
download | mpfr-3ebba522c3a4e2e338e318a6315bd2c62947859e.tar.gz |
Macro MPFR_RET added. Ternary value for mpfr_set4.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1192 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'set.c')
-rw-r--r-- | set.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -25,7 +25,7 @@ MA 02111-1307, USA. */ #include "mpfr.h" #include "mpfr-impl.h" -void +int #if __STDC__ mpfr_set4 (mpfr_ptr a, mpfr_srcptr b, mp_rnd_t rnd_mode, int signb) #else @@ -36,17 +36,20 @@ mpfr_set4 (a, b, rnd_mode, signb) int signb; #endif { + int inex; + if (MPFR_IS_NAN(b)) { MPFR_CLEAR_FLAGS(a); MPFR_SET_NAN(a); - return; + MPFR_RET(0); } if (MPFR_IS_INF(b)) { MPFR_CLEAR_FLAGS(a); MPFR_SET_INF(a); + inex = 0; } else { @@ -60,7 +63,7 @@ mpfr_set4 (a, b, rnd_mode, signb) aq = MPFR_PREC(a); carry = mpfr_round_raw(ap, MPFR_MANT(b), MPFR_PREC(b), (signb < 0), - aq, rnd_mode, NULL); + aq, rnd_mode, &inex); MPFR_EXP(a) = MPFR_EXP(b); if (carry) @@ -69,7 +72,7 @@ mpfr_set4 (a, b, rnd_mode, signb) if (exp == __mpfr_emax) { mpfr_set_overflow(a, rnd_mode, signb); - return; + MPFR_RET(inex); } else { @@ -80,4 +83,5 @@ mpfr_set4 (a, b, rnd_mode, signb) } if (MPFR_SIGN(a) * signb < 0) MPFR_CHANGE_SIGN(a); + MPFR_RET(inex); } |