From 9590826f80b4b7dec14c2f3883b18356dd6113f8 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 19 Aug 2026 12:43:42 +0000 Subject: [PATCH 1/5] fix: avoid overflow in `stats/base/dists/wald/logpdf` --- .../@stdlib/stats/base/dists/wald/logpdf/lib/factory.js | 2 +- .../@stdlib/stats/base/dists/wald/logpdf/lib/main.js | 2 +- .../@stdlib/stats/base/dists/wald/logpdf/src/main.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js index 359d8ab9191a..cf9fb877973f 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js @@ -80,7 +80,7 @@ function factory( mu, lambda ) { return NINF; } v = x - mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( lambda * v * v ) / ( mu * mu * x ) ) ); + return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * ( v / mu ) ) * ( v / mu ) ) ); } } diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js index f56813ff4d81..5397015cc404 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js @@ -94,7 +94,7 @@ function logpdf( x, mu, lambda ) { return NINF; } v = x - mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( lambda * v * v ) / ( mu * mu * x ) ) ); + return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * ( v / mu ) ) * ( v / mu ) ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c index 6f980ed3e03a..99eaf8472d18 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c @@ -54,5 +54,5 @@ double stdlib_base_dists_wald_logpdf( const double x, const double mu, const dou return STDLIB_CONSTANT_FLOAT64_NINF; } v = x - mu; - return 0.5 * ( stdlib_base_ln( lambda ) - ( STDLIB_CONSTANT_FLOAT64_LN_TWO_PI + ( 3.0 * stdlib_base_ln( x ) ) ) - ( ( lambda * v * v ) / ( mu * mu * x ) ) ); + return 0.5 * ( stdlib_base_ln( lambda ) - ( STDLIB_CONSTANT_FLOAT64_LN_TWO_PI + ( 3.0 * stdlib_base_ln( x ) ) ) - ( ( ( lambda / x ) * ( v / mu ) ) * ( v / mu ) ) ); } From 75ddfd0a42b10328d5b59afd78168551a4701e81 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 20 Aug 2026 02:03:30 +0000 Subject: [PATCH 2/5] refactor: cache repeated division in `stats/base/dists/wald/logpdf` --- .../@stdlib/stats/base/dists/wald/logpdf/lib/factory.js | 4 +++- .../@stdlib/stats/base/dists/wald/logpdf/lib/main.js | 4 +++- .../@stdlib/stats/base/dists/wald/logpdf/src/main.c | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js index cf9fb877973f..a856dc772df6 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js @@ -73,6 +73,7 @@ function factory( mu, lambda ) { */ function logpdf( x ) { var v; + var z; if ( isnan( x ) ) { return NaN; } @@ -80,7 +81,8 @@ function factory( mu, lambda ) { return NINF; } v = x - mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * ( v / mu ) ) * ( v / mu ) ) ); + z = v / mu; + return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * z ) * z ) ); } } diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js index 5397015cc404..8dfec0eea714 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js @@ -78,6 +78,7 @@ var NINF = require( '@stdlib/constants/float64/ninf' ); */ function logpdf( x, mu, lambda ) { var v; + var z; if ( isnan( x ) || isnan( mu ) || @@ -94,7 +95,8 @@ function logpdf( x, mu, lambda ) { return NINF; } v = x - mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * ( v / mu ) ) * ( v / mu ) ) ); + z = v / mu; + return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * z ) * z ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c index 99eaf8472d18..c2192eb788a0 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c @@ -37,6 +37,7 @@ */ double stdlib_base_dists_wald_logpdf( const double x, const double mu, const double lambda ) { double v; + double z; if ( stdlib_base_is_nan( x ) || @@ -54,5 +55,6 @@ double stdlib_base_dists_wald_logpdf( const double x, const double mu, const dou return STDLIB_CONSTANT_FLOAT64_NINF; } v = x - mu; - return 0.5 * ( stdlib_base_ln( lambda ) - ( STDLIB_CONSTANT_FLOAT64_LN_TWO_PI + ( 3.0 * stdlib_base_ln( x ) ) ) - ( ( ( lambda / x ) * ( v / mu ) ) * ( v / mu ) ) ); + z = v / mu; + return 0.5 * ( stdlib_base_ln( lambda ) - ( STDLIB_CONSTANT_FLOAT64_LN_TWO_PI + ( 3.0 * stdlib_base_ln( x ) ) ) - ( ( ( lambda / x ) * z ) * z ) ); } From aee9388cc30330cbedfafb79d242343226495e3e Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 20 Aug 2026 02:04:49 +0000 Subject: [PATCH 3/5] refactor: fold division into deviation term in `stats/base/dists/wald/logpdf` --- .../@stdlib/stats/base/dists/wald/logpdf/lib/factory.js | 6 ++---- .../@stdlib/stats/base/dists/wald/logpdf/lib/main.js | 6 ++---- .../@stdlib/stats/base/dists/wald/logpdf/src/main.c | 6 ++---- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js index a856dc772df6..17c7e37fc285 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js @@ -73,16 +73,14 @@ function factory( mu, lambda ) { */ function logpdf( x ) { var v; - var z; if ( isnan( x ) ) { return NaN; } if ( x <= 0.0 || x === PINF ) { return NINF; } - v = x - mu; - z = v / mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * z ) * z ) ); + v = ( x - mu ) / mu; + return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * v ) * v ) ); } } diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js index 8dfec0eea714..224b2c162142 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/main.js @@ -78,7 +78,6 @@ var NINF = require( '@stdlib/constants/float64/ninf' ); */ function logpdf( x, mu, lambda ) { var v; - var z; if ( isnan( x ) || isnan( mu ) || @@ -94,9 +93,8 @@ function logpdf( x, mu, lambda ) { if ( x <= 0.0 || x === PINF ) { return NINF; } - v = x - mu; - z = v / mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * z ) * z ) ); + v = ( x - mu ) / mu; + return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * v ) * v ) ); } diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c index c2192eb788a0..a16b10448e71 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/src/main.c @@ -37,7 +37,6 @@ */ double stdlib_base_dists_wald_logpdf( const double x, const double mu, const double lambda ) { double v; - double z; if ( stdlib_base_is_nan( x ) || @@ -54,7 +53,6 @@ double stdlib_base_dists_wald_logpdf( const double x, const double mu, const dou if ( x <= 0.0 || x == STDLIB_CONSTANT_FLOAT64_PINF ) { return STDLIB_CONSTANT_FLOAT64_NINF; } - v = x - mu; - z = v / mu; - return 0.5 * ( stdlib_base_ln( lambda ) - ( STDLIB_CONSTANT_FLOAT64_LN_TWO_PI + ( 3.0 * stdlib_base_ln( x ) ) ) - ( ( ( lambda / x ) * z ) * z ) ); + v = ( x - mu ) / mu; + return 0.5 * ( stdlib_base_ln( lambda ) - ( STDLIB_CONSTANT_FLOAT64_LN_TWO_PI + ( 3.0 * stdlib_base_ln( x ) ) ) - ( ( ( lambda / x ) * v ) * v ) ); } From c16acbd263ee36deeb949f217cc3e5670d42525c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 20 Aug 2026 02:06:52 +0000 Subject: [PATCH 4/5] refactor: precompute constant term in `stats/base/dists/wald/logpdf` factory --- .../@stdlib/stats/base/dists/wald/logpdf/lib/factory.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js index 17c7e37fc285..dd728356d104 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js @@ -47,6 +47,7 @@ var NINF = require( '@stdlib/constants/float64/ninf' ); * // returns ~-0.129 */ function factory( mu, lambda ) { + var A; if ( isnan( mu ) || isnan( lambda ) || @@ -58,6 +59,7 @@ function factory( mu, lambda ) { if ( lambda === 0.0 ) { return degenerate( mu ); } + A = ln( lambda ); return logpdf; /** @@ -80,7 +82,7 @@ function factory( mu, lambda ) { return NINF; } v = ( x - mu ) / mu; - return 0.5 * ( ln( lambda ) - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * v ) * v ) ); + return 0.5 * ( A - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * v ) * v ) ); } } From 26a21c67ae6ca06240e145fd329001089ec94920 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 20 Aug 2026 02:11:40 +0000 Subject: [PATCH 5/5] refactor: fold constant into precomputed term in `stats/base/dists/wald/logpdf` factory --- .../@stdlib/stats/base/dists/wald/logpdf/lib/factory.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js index dd728356d104..90a49480f20d 100644 --- a/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js +++ b/lib/node_modules/@stdlib/stats/base/dists/wald/logpdf/lib/factory.js @@ -59,7 +59,7 @@ function factory( mu, lambda ) { if ( lambda === 0.0 ) { return degenerate( mu ); } - A = ln( lambda ); + A = ln( lambda ) - LN_TWO_PI; return logpdf; /** @@ -82,7 +82,7 @@ function factory( mu, lambda ) { return NINF; } v = ( x - mu ) / mu; - return 0.5 * ( A - ( LN_TWO_PI + ( 3.0 * ln( x ) ) ) - ( ( ( lambda / x ) * v ) * v ) ); + return 0.5 * ( A - ( 3.0 * ln( x ) ) - ( ( ( lambda / x ) * v ) * v ) ); } }