diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-01-14 17:18:34 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2004-01-14 17:18:34 +0000 |
commit | f9106da753829c3adca5c0cf8c38c4608cc34218 (patch) | |
tree | 2cbb6e0fc012305dc760d50ec8cb93f5b8e746ce /log.c | |
parent | 0a40b14f2ae6f51268df552f999845f23de4a321 (diff) | |
download | mpfr-f9106da753829c3adca5c0cf8c38c4608cc34218.tar.gz |
Changed some error messages into assertions.
Removed some useless #include's.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@2622 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'log.c')
-rw-r--r-- | log.c | 27 |
1 files changed, 12 insertions, 15 deletions
@@ -1,6 +1,6 @@ /* mpfr_log -- natural logarithm of a floating-point number -Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation. +Copyright 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation. This file is part of the MPFR Library. @@ -19,7 +19,6 @@ along with the MPFR Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <stdio.h> #include "gmp.h" #include "gmp-impl.h" #include "mpfr.h" @@ -42,7 +41,7 @@ MA 02111-1307, USA. */ /* #define DEBUG */ int -mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) +mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) { int m, go_on, size, cancel, inexact = 0; mp_prec_t p, q; @@ -63,7 +62,7 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) /* check for infinity before zero */ else if (MPFR_IS_INF(a)) { - if (MPFR_IS_NEG(a)) + if (MPFR_IS_NEG(a)) /* log(-Inf) = NaN */ { MPFR_SET_NAN(r); @@ -75,7 +74,7 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) MPFR_SET_POS(r); MPFR_RET(0); } - } + } else if (MPFR_IS_ZERO(a)) { MPFR_SET_INF(r); @@ -85,7 +84,7 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) else MPFR_ASSERTN(0); } - + /* If a is negative, the result is NaN */ if (MPFR_UNLIKELY( MPFR_IS_NEG(a) )) { @@ -103,7 +102,7 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) MPFR_CLEAR_FLAGS(r); q=MPFR_PREC(r); - + ref = mpfr_get_d1 (a) - 1.0; if (ref<0) ref=-ref; @@ -127,11 +126,11 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) /* All the mpfr_t needed have a precision of p */ TMP_MARK(marker); size=(p-1)/BITS_PER_MP_LIMB+1; - MPFR_TMP_INIT(cstp, cst, p, size); + MPFR_TMP_INIT(cstp, cst, p, size); MPFR_TMP_INIT(rapportp, rapport, p, size); MPFR_TMP_INIT(agmp, agm, p, size); - MPFR_TMP_INIT(tmp1p, tmp1, p, size); - MPFR_TMP_INIT(tmp2p, tmp2, p, size); + MPFR_TMP_INIT(tmp1p, tmp1, p, size); + MPFR_TMP_INIT(tmp2p, tmp2, p, size); MPFR_TMP_INIT(sp, s, p, size); MPFR_TMP_INIT(mmp, mm, p, size); @@ -146,8 +145,8 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) mpfr_div (tmp2, cst, tmp1, GMP_RNDN); /* pi/2*AG(1,4/s), err<=5ulps */ mpfr_const_log2 (cst, GMP_RNDN); /* compute log(2), err<=1ulp */ mpfr_mul(tmp1,cst,mm,GMP_RNDN); /* I compute m*log(2), err<=2ulps */ - cancel = MPFR_GET_EXP (tmp2); - mpfr_sub(cst,tmp2,tmp1,GMP_RNDN); /* log(a), err<=7ulps+cancel */ + cancel = MPFR_GET_EXP (tmp2); + mpfr_sub(cst,tmp2,tmp1,GMP_RNDN); /* log(a), err<=7ulps+cancel */ cancel -= MPFR_GET_EXP (cst); #ifdef DEBUG printf("canceled bits=%d\n", cancel); @@ -173,9 +172,7 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mp_rnd_t rnd_mode) /* We clean */ TMP_FREE(marker); - + } return inexact; /* result is inexact */ } - - |