changeset 29617:69e701caf5f6

maint: merge stable to default.
author Rik <rik@octave.org>
date Wed, 05 May 2021 14:27:17 -0700
parents f6151f915e3c (current diff) 69b6b783a8ab (diff)
children a31cf1ec1349
files scripts/specfun/betaincinv.m
diffstat 1 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/specfun/betaincinv.m	Wed May 05 14:13:01 2021 -0700
+++ b/scripts/specfun/betaincinv.m	Wed May 05 14:27:17 2021 -0700
@@ -236,7 +236,9 @@
   while (any (todo) && (it < maxit))
     it++;
     x(todo) += res(todo);
-    x(x(todo) < 0) = eps;  # Avoid negative x in betainc() call, bug #60528
+    ## Avoid intermediate values outside betainc() range of [0, 1], bug #60528
+    x(x(todo) < 0) = eps;
+    x(x(todo) > 1) = 1-eps;
     res(todo) = -F(x(todo), a(todo), b(todo), y(todo)) ...
                 ./ JF (x(todo), a(todo), b(todo));
     todo = (abs (res) >= tol * abs (x));
@@ -283,7 +285,8 @@
 %!assert (class (betaincinv (int8 (0), single (1), 1)), "single")
 %!assert (class (betaincinv (single (0.5), int8 (1), 1)), "single")
 
-%!assert <*60528> (betaincinv (1e-6, 1, 3), 3.3333344444450657e-07, eps)
+%!assert <*60528> (betaincinv (1e-6, 1, 3), 3.3333344444450657e-07, 5*eps)
+%!assert <*60528> (betaincinv (1-1e-6, 3, 1), 0.999999666666556, 5*eps)
 
 ## Test input validation
 %!error <Invalid call> betaincinv ()