diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2017-02-28 08:06:05 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2017-02-28 08:06:05 +0000 |
commit | b4bc3781c7d0aff4dc292231f0c7e39d91b1b029 (patch) | |
tree | e52147fbae141e0f173b776462621ed571400120 /src/beta.c | |
parent | c6d9e2f0cdd3bdbd2f190f22c9b0926508755908 (diff) | |
download | mpfr-b4bc3781c7d0aff4dc292231f0c7e39d91b1b029.tar.gz |
[src/beta.c] fixed case z or w is 0
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@11371 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/beta.c')
-rw-r--r-- | src/beta.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/src/beta.c b/src/beta.c index a6eb77e8c..b2f4154bc 100644 --- a/src/beta.c +++ b/src/beta.c @@ -121,24 +121,41 @@ mpfr_beta (mpfr_ptr r, mpfr_srcptr z, mpfr_srcptr w, mpfr_rnd_t rnd_mode) } else /* z or w is 0 */ { - /* for z > 0, beta(z,+0) = +Inf, beta(z,-0) = -Inf - beta(+-0,+-0) = NaN - beta(+-0, w) is NaN for w < 0 */ - /* FIXME: If w is not an integer, this seems wrong. */ - if (mpfr_cmp_ui (z, 0) > 0) /* then w = +0 or -0 */ + if (mpfr_cmp_ui (z, 0) != 0) /* then w = +0 or -0 */ { + /* beta(z,+0) = +Inf, beta(z,-0) = -Inf */ MPFR_SET_INF(r); MPFR_SET_SAME_SIGN(r,w); MPFR_SET_DIVBY0 (); MPFR_RET(0); } - else + else if (mpfr_cmp_ui (w, 0) != 0) { - MPFR_SET_NAN(r); - MPFR_RET_NAN; + /* beta(+0,w) = +Inf, beta(-0,w) = -Inf */ + MPFR_SET_INF(r); + MPFR_SET_SAME_SIGN(r,z); + MPFR_SET_DIVBY0 (); + MPFR_RET(0); + } + else /* w = z = 0: + beta(+0,+0) = +Inf + beta(-0,-0) = -Inf + beta(+0,-0) = NaN */ + { + if (MPFR_SIGN(z) == MPFR_SIGN(w)) + { + MPFR_SET_INF(r); + MPFR_SET_SAME_SIGN(r,z); + MPFR_SET_DIVBY0 (); + MPFR_RET(0); + } + else + { + MPFR_SET_NAN(r); + MPFR_RET_NAN; + } } } - return 0; } /* special case when w is a negative integer */ |