Return NaN in ndtri for values outside valid input range.

(cherry picked from commit 1f79a6078fb77da47069c8aec23c4e309fb982e2)
This commit is contained in:
Antonio Sánchez 2023-05-05 16:27:26 +00:00 committed by Antonio Sanchez
parent 385a0b38f8
commit 26b8fabd80
2 changed files with 8 additions and 8 deletions

View File

@ -471,9 +471,9 @@ struct erfc_impl<double> {
* ERROR MESSAGES:
*
* message condition value returned
* ndtri domain x <= 0 -MAXNUM
* ndtri domain x >= 1 MAXNUM
*
* ndtri domain x == 0 -INF
* ndtri domain x == 1 INF
* ndtri domain x < 0, x > 1 NAN
*/
/*
Cephes Math Library Release 2.2: June, 1992
@ -635,8 +635,8 @@ T generic_ndtri(const T& a) {
generic_ndtri_lt_exp_neg_two<T, ScalarType>(b, should_flipsign));
return pselect(
pcmp_le(a, zero), neg_maxnum,
pselect(pcmp_le(one, a), maxnum, ndtri));
pcmp_eq(a, zero), neg_maxnum,
pselect(pcmp_eq(one, a), maxnum, ndtri));
}
template <typename Scalar>

View File

@ -171,9 +171,9 @@ template<typename ArrayType> void array_special_functions()
// Check the ndtri function against scipy.special.ndtri
{
ArrayType x(7), res(7), ref(7);
x << 0.5, 0.2, 0.8, 0.9, 0.1, 0.99, 0.01;
ref << 0., -0.8416212335729142, 0.8416212335729142, 1.2815515655446004, -1.2815515655446004, 2.3263478740408408, -2.3263478740408408;
ArrayType x(11), res(11), ref(11);
x << 0.5, 0.2, 0.8, 0.9, 0.1, 0.99, 0.01, 0, 1, -0.01, 1.01;
ref << 0., -0.8416212335729142, 0.8416212335729142, 1.2815515655446004, -1.2815515655446004, 2.3263478740408408, -2.3263478740408408, -plusinf, plusinf, nan, nan;
CALL_SUBTEST( verify_component_wise(ref, ref); );
CALL_SUBTEST( res = x.ndtri(); verify_component_wise(res, ref); );
CALL_SUBTEST( res = ndtri(x); verify_component_wise(res, ref); );