diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2000-12-14 14:29:04 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2000-12-14 14:29:04 +0000 |
commit | 1266dd2af06eb854d18b27e892b58a1c7d60e098 (patch) | |
tree | 6f737680d2ac382c64b72b52e683eb2bceefabe7 /reldiff.c | |
parent | 890ee270ee99b13f1d4c8bbcd6d748fcea04e309 (diff) | |
download | mpfr-1266dd2af06eb854d18b27e892b58a1c7d60e098.tar.gz |
Take into account Inf, Nans ; clear the flags of the return variable
in most function calls.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@856 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'reldiff.c')
-rw-r--r-- | reldiff.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -36,21 +36,24 @@ mpfr_reldiff(a, b, c, rnd_mode) mp_rnd_t rnd_mode; #endif { - if (MPFR_IS_NAN(b) || MPFR_IS_NAN(c)) { MPFR_SET_NAN(a); return; } + if (MPFR_IS_NAN(b) || MPFR_IS_NAN(c)) + { MPFR_CLEAR_FLAGS(a); MPFR_SET_NAN(a); return; } if (MPFR_IS_INF(b)) { if (MPFR_IS_INF(c) && (MPFR_SIGN(c) == MPFR_SIGN(b))) - { MPFR_SET_ZERO(a); return; } - else { MPFR_SET_NAN(a); return; } + { MPFR_CLEAR_FLAGS(a); MPFR_SET_ZERO(a); return; } + else + { MPFR_CLEAR_FLAGS(a); MPFR_SET_NAN(a); return; } } if (MPFR_IS_INF(c)) { - MPFR_SET_INF(a); - if (MPFR_SIGN(a) == MPFR_SIGN(c)) { MPFR_CHANGE_SIGN(a); } + if (MPFR_SIGN(a) != MPFR_SIGN(b)) { MPFR_CHANGE_SIGN(a); } + MPFR_CLEAR_FLAGS(a); + MPFR_SET_INF(a); } - if (!MPFR_NOTZERO(b)) /* reldiff = abs(c)/c = sign(c) */ + if (MPFR_IS_ZERO(b)) /* reldiff = abs(c)/c = sign(c) */ /* TODO: faire preciser la SEMANTIQUE DE CE FOUTOIR. */ mpfr_set_ui(a, MPFR_SIGN(c), rnd_mode); else { |