summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaney <daney@280ebfd0-de03-0410-8827-d642c229c3f4>2001-10-25 15:02:59 +0000
committerdaney <daney@280ebfd0-de03-0410-8827-d642c229c3f4>2001-10-25 15:02:59 +0000
commit1dfd99f01be78d9b4b09f795b69e41c95ffb13ec (patch)
treebcbe984cded05daae046dc46a03baed92a23a0bc
parentc481bdd7b842503bf646dfb547779871363f20d1 (diff)
downloadmpfr-1dfd99f01be78d9b4b09f795b69e41c95ffb13ec.tar.gz
correction for reuse
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1369 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r--log_base_10.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/log_base_10.c b/log_base_10.c
index fb50332be..b263c8bc2 100644
--- a/log_base_10.c
+++ b/log_base_10.c
@@ -49,36 +49,47 @@ mpfr_log10 (r, a, rnd_mode)
MPFR_SET_NAN(r);
return 1;
}
-
- if (MPFR_IS_ZERO(a))
- {
- MPFR_SET_INF(r);
- if (MPFR_SIGN(r) > 0)
- MPFR_CHANGE_SIGN(r);
- DIVIDE_BY_ZERO; /* Execption GMP*/
- return 0;
- }
-
/* If a is negative, the result is NaN */
if (MPFR_SIGN(a) < 0)
{
- MPFR_SET_NAN(r);
- return 1;
+ if (MPFR_IS_ZERO(a))
+ {
+ MPFR_SET_INF(r);
+ if (MPFR_SIGN(r) > 0)
+ MPFR_CHANGE_SIGN(r);
+ /* Execption GMP*/
+ return 0;
+ }
+ else
+ {
+ MPFR_SET_NAN(r);
+ return 1;
+ }
}
MPFR_CLEAR_NAN(r);
/* check for infinity before zero */
if (MPFR_IS_INF(a))
- {
+ {
MPFR_SET_INF(r);
- MPFR_SET_SAME_SIGN(r,a);
+ if(MPFR_SIGN(r) < 0)
+ MPFR_CHANGE_SIGN(r);
return 0;
}
/* Now we can clear the flags without damage even if r == a */
+
MPFR_CLEAR_INF(r);
+ if (MPFR_IS_ZERO(a))
+ {
+ MPFR_SET_INF(r);
+ if (MPFR_SIGN(r) > 0)
+ MPFR_CHANGE_SIGN(r);
+ /* Execption GMP*/
+ return 0;
+ }
/* If a is 1, the result is 0 */
if (mpfr_cmp_ui(a,1) == 0)
@@ -88,6 +99,7 @@ mpfr_log10 (r, a, rnd_mode)
return 0;
}
+
/* General case */
{
/* Declaration of the intermediary variable */