diff --git a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/factory.js index 6e7eef33833d..d403e5d837bf 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/factory.js @@ -88,16 +88,21 @@ function factory( r, p ) { if ( isnan( k ) || k < 0.0 || k > 1.0 ) { return NaN; } + if ( p === 1.0 ) { + return 0.0; + } if ( k === 0.0 ) { return 0.0; } if ( k === 1.0 ) { return PINF; } + // If the mean overflows double-precision floating-point format, the sought quantile saturates at positive infinity: if ( mu === PINF ) { return PINF; } + // Cornish-Fisher expansion: if ( k < 0.5 ) { x = -erfcinv( 2.0 * k ) * SQRT2; diff --git a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/main.js index d58c5431f8d9..0de81b47f1c4 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/lib/main.js @@ -118,6 +118,9 @@ function quantile( k, r, p ) { ) { return NaN; } + if ( p === 1.0 ) { + return 0.0; + } if ( k === 0.0 ) { return 0.0; } diff --git a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/src/main.c index 1e62a238838d..ac234cdbbe57 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/src/main.c @@ -106,6 +106,9 @@ double stdlib_base_dists_negative_binomial_quantile( const double k, const doubl ) { return 0.0 / 0.0; // NaN } + if ( p == 1.0 ) { + return 0.0; + } if ( k == 0.0 ) { return 0.0; } diff --git a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.factory.js b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.factory.js index c9dc483a0232..cf81f6cf3f10 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.factory.js @@ -156,6 +156,21 @@ tape( 'if provided a success probability `p` equal to `0`, the created function t.end(); }); +tape( 'if provided a success probability `p` equal to `1`, the created function always returns `0`', function test( t ) { + var quantile; + var y; + + quantile = factory( 20.0, 1.0 ); + + y = quantile( 0.5 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + y = quantile( 0.9 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); + tape( 'if the distribution mean overflows double-precision floating-point format, the created function returns `+infinity`', function test( t ) { var quantile; var y; diff --git a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.main.js b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.main.js index 4fd65da45c6d..ef8bb1cd1cde 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.main.js @@ -106,6 +106,18 @@ tape( 'if provided a success probability `p` equal to `0`, the function returns t.end(); }); +tape( 'if provided a success probability `p` equal to `1`, the function returns `0`', function test( t ) { + var y; + + y = quantile( 0.5, 20, 1.0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + y = quantile( 0.9, 10, 1.0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); + tape( 'if the distribution mean overflows double-precision floating-point format, the function returns `+infinity`', function test( t ) { var y; diff --git a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.native.js b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.native.js index 31ce5b92aef5..0a202c12a685 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/negative-binomial/quantile/test/test.native.js @@ -115,6 +115,18 @@ tape( 'if provided a success probability `p` equal to `0`, the function returns t.end(); }); +tape( 'if provided a success probability `p` equal to `1`, the function returns `0`', opts, function test( t ) { + var y; + + y = quantile( 0.5, 20, 1.0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + y = quantile( 0.9, 10, 1.0 ); + t.strictEqual( y, 0.0, 'returns expected value' ); + + t.end(); +}); + tape( 'if the distribution mean overflows double-precision floating-point format, the function returns `+infinity`', opts, function test( t ) { var y;