summaryrefslogtreecommitdiff
path: root/src/beta.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2017-02-28 08:06:05 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2017-02-28 08:06:05 +0000
commitb4bc3781c7d0aff4dc292231f0c7e39d91b1b029 (patch)
treee52147fbae141e0f173b776462621ed571400120 /src/beta.c
parentc6d9e2f0cdd3bdbd2f190f22c9b0926508755908 (diff)
downloadmpfr-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.c35
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 */