diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/ctor/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/dists/weibull/ctor/docs/repl.txt index 07cd4a2bf96c..eaea4b1b6ca4 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/ctor/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/ctor/docs/repl.txt @@ -95,7 +95,7 @@ > weibull.logpdf( 1.0 ) ~-7.865 > weibull.mgf( -0.5 ) - ~0.075 + ~0.109 > weibull.pdf( 3.0 ) ~0.089 > weibull.quantile( 0.8 ) diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/README.md b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/README.md index 88927125efce..3f5caa99989a 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/README.md +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/README.md @@ -66,7 +66,7 @@ var y = mgf( 1.0, 1.0, 0.5); // returns ~2.0 y = mgf( -1.0, 4.0, 4.0 ); -// returns ~0.019 +// returns ~0.045 ``` If provided `NaN` as any argument, the function returns `NaN`. diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/repl.txt index 9a0f5affc255..b91a16d3cfac 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/repl.txt @@ -28,7 +28,7 @@ > var y = {{alias}}( 1.0, 1.0, 0.5 ) ~2.0 > y = {{alias}}( -1.0, 4.0, 4.0 ) - ~0.019 + ~0.045 > y = {{alias}}( NaN, 1.0, 1.0 ) NaN diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/types/index.d.ts b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/types/index.d.ts index e49ab07a0a7d..653ed676c1ee 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/docs/types/index.d.ts @@ -48,7 +48,7 @@ interface MGF { * * @example * var y = mgf( -1.0, 4.0, 4.0 ); - * // returns ~0.019 + * // returns ~0.045 * * @example * var y = mgf( NaN, 1.0, 1.0 ); @@ -112,7 +112,7 @@ interface MGF { * // returns ~2.0 * * y = mgf( -1.0, 4.0, 4.0 ); -* // returns ~0.019 +* // returns ~0.045 * * var myMGF = mgf.factory( 8.0, 10.0 ); * diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/factory.js index deda44df4f6a..c6caf89e7dc6 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/factory.js @@ -23,6 +23,7 @@ var constantFunction = require( '@stdlib/utils/constant-function' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var gamma = require( '@stdlib/math/base/special/gamma' ); +var abs = require( '@stdlib/math/base/special/abs' ); var EPS = require( '@stdlib/constants/float64/eps' ); @@ -87,7 +88,7 @@ function factory( k, lambda ) { summand = c * gamma( 1.0 + (n / k) ); } sum += summand; - } while ( summand / sum > EPS ); + } while ( abs( summand / sum ) > EPS ); return sum; } } diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/index.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/index.js index 91894c9bdcc1..947a157b25c4 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/index.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/index.js @@ -30,7 +30,7 @@ * // returns ~2.0 * * y = mgf( -1.0, 4.0, 4.0 ); -* // returns ~0.019 +* // returns ~0.045 * * var myMGF = mgf.factory( 8.0, 10.0 ); * diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/main.js index 7f4ee7fbcc04..4ee4d1356c8e 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/main.js @@ -22,6 +22,7 @@ var isnan = require( '@stdlib/math/base/assert/is-nan' ); var gamma = require( '@stdlib/math/base/special/gamma' ); +var abs = require( '@stdlib/math/base/special/abs' ); var EPS = require( '@stdlib/constants/float64/eps' ); @@ -41,7 +42,7 @@ var EPS = require( '@stdlib/constants/float64/eps' ); * * @example * var y = mgf( -1.0, 4.0, 4.0 ); -* // returns ~0.019 +* // returns ~0.045 * * @example * var y = mgf( NaN, 1.0, 1.0 ); @@ -98,7 +99,7 @@ function mgf( t, k, lambda ) { summand = c * gamma( 1.0 + (n / k) ); } sum += summand; - } while ( summand / sum > EPS ); + } while ( abs( summand / sum ) > EPS ); return sum; } diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/native.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/native.js index 6d1fc9788165..47360342d702 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/lib/native.js @@ -40,7 +40,7 @@ var addon = require( './../src/addon.node' ); * * @example * var y = mgf( -1.0, 4.0, 4.0 ); -* // returns ~0.019 +* // returns ~0.045 * * @example * var y = mgf( NaN, 1.0, 1.0 ); diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/manifest.json b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/manifest.json index b62200f36259..78e191569841 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/manifest.json +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/manifest.json @@ -41,6 +41,7 @@ "@stdlib/math/base/napi/ternary", "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/gamma", + "@stdlib/math/base/special/abs", "@stdlib/constants/float64/eps" ] }, @@ -58,6 +59,7 @@ "dependencies": [ "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/gamma", + "@stdlib/math/base/special/abs", "@stdlib/constants/float64/eps" ] }, @@ -75,6 +77,7 @@ "dependencies": [ "@stdlib/math/base/assert/is-nan", "@stdlib/math/base/special/gamma", + "@stdlib/math/base/special/abs", "@stdlib/constants/float64/eps" ] } diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/src/main.c index 5c152e7d0ff9..cc730f3d898d 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/src/main.c @@ -19,6 +19,7 @@ #include "stdlib/stats/base/dists/weibull/mgf.h" #include "stdlib/math/base/assert/is_nan.h" #include "stdlib/math/base/special/gamma.h" +#include "stdlib/math/base/special/abs.h" #include "stdlib/constants/float64/eps.h" /** @@ -60,6 +61,6 @@ double stdlib_base_dists_weibull_mgf( const double t, const double k, const doub summand = c * stdlib_base_gamma( 1.0 + (n / k) ); } sum += summand; - } while ( summand / sum > STDLIB_CONSTANT_FLOAT64_EPS ); + } while ( stdlib_base_abs( summand / sum ) > STDLIB_CONSTANT_FLOAT64_EPS ); return sum; } diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.factory.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.factory.js index 4d4366eba427..a47cd1e9bf69 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.factory.js @@ -23,6 +23,7 @@ var tape = require( 'tape' ); var isNumber = require( '@stdlib/assert/is-number' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var randu = require( '@stdlib/random/base/randu' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); @@ -172,3 +173,28 @@ tape( 'the created function evaluates the mgf', function test( t ) { } t.end(); }); + +tape( 'the created function evaluates the mgf for negative `t`', function test( t ) { + var expected; + var mgf; + var x; + var y; + var i; + + // Reference values computed by summing the series in 1024-bit precision: + mgf = factory( 2.0, 4.0 ); + x = [ -0.3 ]; + expected = [ 0.39615540526349546 ]; + for ( i = 0; i < x.length; i++ ) { + y = mgf( x[ i ] ); + t.strictEqual( isAlmostSameValue( y, expected[ i ], 4 ), true, 'returns expected value' ); + } + mgf = factory( 1.0, 1.0 ); + x = [ -0.1, -0.5 ]; + expected = [ 0.9090909090909091, 0.6666666666666666 ]; + for ( i = 0; i < x.length; i++ ) { + y = mgf( x[ i ] ); + t.strictEqual( isAlmostSameValue( y, expected[ i ], 4 ), true, 'returns expected value' ); + } + t.end(); +}); diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.mgf.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.mgf.js index b117537075a8..842254799dfb 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.mgf.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.mgf.js @@ -23,6 +23,7 @@ var tape = require( 'tape' ); var isNumber = require( '@stdlib/assert/is-number' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var randu = require( '@stdlib/random/base/randu' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); @@ -134,3 +135,30 @@ tape( 'the function evaluates the mgf', function test( t ) { } t.end(); }); + +tape( 'the function evaluates the mgf for negative `t`', function test( t ) { + var expected; + var lambda; + var k; + var x; + var y; + var i; + + // Reference values computed by summing the series in 1024-bit precision: + x = [ -0.1, -0.5, -0.2, -0.3, -2.0, -0.5 ]; + k = [ 1.0, 1.0, 3.0, 2.0, 2.0, 1.5 ]; + lambda = [ 1.0, 1.0, 0.5, 4.0, 1.0, 2.0 ]; + expected = [ + 0.9090909090909091, + 0.6666666666666666, + 0.9150539469807932, + 0.39615540526349546, + 0.2421278438586879, + 0.4728095755272915 + ]; + for ( i = 0; i < x.length; i++ ) { + y = mgf( x[ i ], k[ i ], lambda[ i ] ); + t.strictEqual( isAlmostSameValue( y, expected[ i ], 4 ), true, 'returns expected value' ); + } + t.end(); +}); diff --git a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.native.js b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.native.js index dffb84e33de3..3babbd407f27 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.native.js +++ b/lib/node_modules/@stdlib/stats/base/dists/weibull/mgf/test/test.native.js @@ -25,6 +25,7 @@ var tape = require( 'tape' ); var tryRequire = require( '@stdlib/utils/try-require' ); var isNumber = require( '@stdlib/assert/is-number' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); var randu = require( '@stdlib/random/base/randu' ); var PINF = require( '@stdlib/constants/float64/pinf' ); var NINF = require( '@stdlib/constants/float64/ninf' ); @@ -128,3 +129,30 @@ tape( 'the function evaluates the mgf', opts, function test( t ) { } t.end(); }); + +tape( 'the function evaluates the mgf for negative `t`', opts, function test( t ) { + var expected; + var lambda; + var k; + var x; + var y; + var i; + + // Reference values computed by summing the series in 1024-bit precision: + x = [ -0.1, -0.5, -0.2, -0.3, -2.0, -0.5 ]; + k = [ 1.0, 1.0, 3.0, 2.0, 2.0, 1.5 ]; + lambda = [ 1.0, 1.0, 0.5, 4.0, 1.0, 2.0 ]; + expected = [ + 0.9090909090909091, + 0.6666666666666666, + 0.9150539469807932, + 0.39615540526349546, + 0.2421278438586879, + 0.4728095755272915 + ]; + for ( i = 0; i < x.length; i++ ) { + y = mgf( x[ i ], k[ i ], lambda[ i ] ); + t.strictEqual( isAlmostSameValue( y, expected[ i ], 4 ), true, 'returns expected value' ); + } + t.end(); +});