Skip to content

Commit 68894a1

Browse files
bench: refactor random number generation in stats/base/dists/betaprime
PR-URL: #4840 Reviewed-by: Athan Reines <[email protected]>
1 parent af55f0d commit 68894a1

File tree

16 files changed

+249
-90
lines changed

16 files changed

+249
-90
lines changed

lib/node_modules/@stdlib/stats/base/dists/betaprime/cdf/benchmark/benchmark.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var Float64Array = require( '@stdlib/array/float64' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
2526
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2627
var EPS = require( '@stdlib/constants/float64/eps' );
2728
var pkg = require( './../package.json' ).name;
@@ -33,16 +34,24 @@ var cdf = require( './../lib' );
3334
bench( pkg, function benchmark( b ) {
3435
var alpha;
3536
var beta;
37+
var len;
3638
var x;
3739
var y;
3840
var i;
3941

42+
len = 100;
43+
x = new Float64Array( len );
44+
alpha = new Float64Array( len );
45+
beta = new Float64Array( len );
46+
for ( i = 0; i < len; i++ ) {
47+
x[ i ] = uniform( EPS, 2.0 );
48+
alpha[ i ] = uniform( EPS, 100.0 );
49+
beta[ i ] = uniform( EPS, 100.0 );
50+
}
51+
4052
b.tic();
4153
for ( i = 0; i < b.iterations; i++ ) {
42-
x = ( randu()*2.0 ) + EPS;
43-
alpha = ( randu()*100.0 ) + EPS;
44-
beta = ( randu()*100.0 ) + EPS;
45-
y = cdf( x, alpha, beta );
54+
y = cdf( x[i % len], alpha[i % len], beta[i % len] );
4655
if ( isnan( y ) ) {
4756
b.fail( 'should not return NaN' );
4857
}
@@ -59,18 +68,23 @@ bench( pkg+':factory', function benchmark( b ) {
5968
var mycdf;
6069
var alpha;
6170
var beta;
71+
var len;
6272
var x;
6373
var y;
6474
var i;
6575

6676
alpha = 100.56789;
6777
beta = 55.54321;
6878
mycdf = cdf.factory( alpha, beta );
79+
len = 100;
80+
x = new Float64Array( len );
81+
for ( i = 0; i < len; i++ ) {
82+
x[ i ] = uniform( EPS, 2.0 );
83+
}
6984

7085
b.tic();
7186
for ( i = 0; i < b.iterations; i++ ) {
72-
x = ( randu()*2.0 ) + EPS;
73-
y = mycdf( x );
87+
y = mycdf( x[ i % len ] );
7488
if ( isnan( y ) ) {
7589
b.fail( 'should not return NaN' );
7690
}

lib/node_modules/@stdlib/stats/base/dists/betaprime/ctor/benchmark/benchmark.js

Lines changed: 96 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var randu = require( '@stdlib/random/base/randu' );
24+
var Float64Array = require( '@stdlib/array/float64' );
25+
var uniform = require( '@stdlib/random/base/uniform' );
2526
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2627
var EPS = require( '@stdlib/constants/float64/eps' );
2728
var pkg = require( './../package.json' ).name;
@@ -34,13 +35,20 @@ bench( pkg+'::instantiation', function benchmark( b ) {
3435
var alpha;
3536
var beta;
3637
var dist;
38+
var len;
3739
var i;
3840

41+
len = 100;
42+
alpha = new Float64Array( len );
43+
beta = new Float64Array( len );
44+
for ( i = 0; i < len; i++ ) {
45+
alpha[ i ] = uniform( EPS, 10.0 );
46+
beta[ i ] = uniform( EPS, 10.0 );
47+
}
48+
3949
b.tic();
4050
for ( i = 0; i < b.iterations; i++ ) {
41-
alpha = ( randu() * 10.0 ) + EPS;
42-
beta = ( randu() * 10.0 ) + EPS;
43-
dist = new BetaPrime( alpha, beta );
51+
dist = new BetaPrime( alpha[ i % len ], beta[ i % len ] );
4452
if ( !( dist instanceof BetaPrime ) ) {
4553
b.fail( 'should return a distribution instance' );
4654
}
@@ -83,18 +91,23 @@ bench( pkg+'::set:alpha', function benchmark( b ) {
8391
var alpha;
8492
var beta;
8593
var dist;
94+
var len;
8695
var y;
8796
var i;
8897

8998
alpha = 100.56789;
9099
beta = 55.54321;
91100
dist = new BetaPrime( alpha, beta );
101+
len = 100;
102+
y = new Float64Array( len );
103+
for ( i = 0; i < len; i++ ) {
104+
y[ i ] = uniform( EPS, 100.0 );
105+
}
92106

93107
b.tic();
94108
for ( i = 0; i < b.iterations; i++ ) {
95-
y = ( 100.0*randu() ) + EPS;
96-
dist.alpha = y;
97-
if ( dist.alpha !== y ) {
109+
dist.alpha = y[ i % len ];
110+
if ( dist.alpha !== y[ i % len ] ) {
98111
b.fail( 'should return set value' );
99112
}
100113
}
@@ -136,18 +149,23 @@ bench( pkg+'::set:beta', function benchmark( b ) {
136149
var alpha;
137150
var beta;
138151
var dist;
152+
var len;
139153
var y;
140154
var i;
141155

142156
alpha = 100.56789;
143157
beta = 55.54321;
144158
dist = new BetaPrime( alpha, beta );
159+
len = 100;
160+
y = new Float64Array( len );
161+
for ( i = 0; i < len; i++ ) {
162+
y[ i ] = uniform( EPS, 100.0 );
163+
}
145164

146165
b.tic();
147166
for ( i = 0; i < b.iterations; i++ ) {
148-
y = ( 100.0*randu() ) + EPS;
149-
dist.beta = y;
150-
if ( dist.beta !== y ) {
167+
dist.beta = y[ i % len ];
168+
if ( dist.beta !== y[ i % len ] ) {
151169
b.fail( 'should return set value' );
152170
}
153171
}
@@ -163,16 +181,23 @@ bench( pkg+':kurtosis', function benchmark( b ) {
163181
var alpha;
164182
var beta;
165183
var dist;
184+
var len;
185+
var x;
166186
var y;
167187
var i;
168188

169189
alpha = 100.56789;
170190
beta = 55.54321;
171191
dist = new BetaPrime( alpha, beta );
192+
len = 100;
193+
x = new Float64Array( len );
194+
for ( i = 0; i < len; i++ ) {
195+
x[ i ] = uniform( EPS, 100.0 );
196+
}
172197

173198
b.tic();
174199
for ( i = 0; i < b.iterations; i++ ) {
175-
dist.alpha = ( 100.0*randu() ) + EPS;
200+
dist.alpha = x[ i % len ];
176201
y = dist.kurtosis;
177202
if ( isnan( y ) ) {
178203
b.fail( 'should not return NaN' );
@@ -190,16 +215,23 @@ bench( pkg+':mean', function benchmark( b ) {
190215
var alpha;
191216
var beta;
192217
var dist;
218+
var len;
219+
var x;
193220
var y;
194221
var i;
195222

196223
alpha = 100.56789;
197224
beta = 55.54321;
198225
dist = new BetaPrime( alpha, beta );
226+
len = 100;
227+
x = new Float64Array( len );
228+
for ( i = 0; i < len; i++ ) {
229+
x[ i ] = uniform( EPS, 100.0 );
230+
}
199231

200232
b.tic();
201233
for ( i = 0; i < b.iterations; i++ ) {
202-
dist.alpha = ( 100.0*randu() ) + EPS;
234+
dist.alpha = x[ i % len ];
203235
y = dist.mean;
204236
if ( isnan( y ) ) {
205237
b.fail( 'should not return NaN' );
@@ -217,16 +249,23 @@ bench( pkg+':mode', function benchmark( b ) {
217249
var alpha;
218250
var beta;
219251
var dist;
252+
var len;
253+
var x;
220254
var y;
221255
var i;
222256

223257
alpha = 100.56789;
224258
beta = 55.54321;
225259
dist = new BetaPrime( alpha, beta );
260+
len = 100;
261+
x = new Float64Array( len );
262+
for ( i = 0; i < len; i++ ) {
263+
x[ i ] = uniform( 1.0 + EPS, 100.0 );
264+
}
226265

227266
b.tic();
228267
for ( i = 0; i < b.iterations; i++ ) {
229-
dist.alpha = ( 100.0*randu() ) + 1.0 + EPS;
268+
dist.alpha = x[ i % len ];
230269
y = dist.mode;
231270
if ( isnan( y ) ) {
232271
b.fail( 'should not return NaN' );
@@ -244,16 +283,23 @@ bench( pkg+':skewness', function benchmark( b ) {
244283
var alpha;
245284
var beta;
246285
var dist;
286+
var len;
287+
var x;
247288
var y;
248289
var i;
249290

250291
alpha = 100.56789;
251292
beta = 55.54321;
252293
dist = new BetaPrime( alpha, beta );
294+
len = 100;
295+
x = new Float64Array( len );
296+
for ( i = 0; i < len; i++ ) {
297+
x[ i ] = uniform( EPS, 100.0 );
298+
}
253299

254300
b.tic();
255301
for ( i = 0; i < b.iterations; i++ ) {
256-
dist.alpha = ( 100.0*randu() ) + EPS;
302+
dist.alpha = x[ i % len ];
257303
y = dist.skewness;
258304
if ( isnan( y ) ) {
259305
b.fail( 'should not return NaN' );
@@ -271,16 +317,23 @@ bench( pkg+':stdev', function benchmark( b ) {
271317
var alpha;
272318
var beta;
273319
var dist;
320+
var len;
321+
var x;
274322
var y;
275323
var i;
276324

277325
alpha = 100.56789;
278326
beta = 55.54321;
279327
dist = new BetaPrime( alpha, beta );
328+
len = 100;
329+
x = new Float64Array( len );
330+
for ( i = 0; i < len; i++ ) {
331+
x[ i ] = uniform( EPS, 100.0 );
332+
}
280333

281334
b.tic();
282335
for ( i = 0; i < b.iterations; i++ ) {
283-
dist.alpha = ( 100.0*randu() ) + EPS;
336+
dist.alpha = x[ i % len ];
284337
y = dist.stdev;
285338
if ( isnan( y ) ) {
286339
b.fail( 'should not return NaN' );
@@ -298,18 +351,23 @@ bench( pkg+':cdf', function benchmark( b ) {
298351
var alpha;
299352
var beta;
300353
var dist;
354+
var len;
301355
var x;
302356
var y;
303357
var i;
304358

305359
alpha = 100.56789;
306360
beta = 55.54321;
307361
dist = new BetaPrime( alpha, beta );
362+
len = 100;
363+
x = new Float64Array( len );
364+
for ( i = 0; i < len; i++ ) {
365+
x[ i ] = uniform( 0.0, 1.0 );
366+
}
308367

309368
b.tic();
310369
for ( i = 0; i < b.iterations; i++ ) {
311-
x = randu();
312-
y = dist.cdf( x );
370+
y = dist.cdf( x[ i % len ] );
313371
if ( isnan( y ) ) {
314372
b.fail( 'should not return NaN' );
315373
}
@@ -326,18 +384,23 @@ bench( pkg+':logpdf', function benchmark( b ) {
326384
var alpha;
327385
var beta;
328386
var dist;
387+
var len;
329388
var x;
330389
var y;
331390
var i;
332391

333392
alpha = 100.56789;
334393
beta = 55.54321;
335394
dist = new BetaPrime( alpha, beta );
395+
len = 100;
396+
x = new Float64Array( len );
397+
for ( i = 0; i < len; i++ ) {
398+
x[ i ] = uniform( 0.0, 1.0 );
399+
}
336400

337401
b.tic();
338402
for ( i = 0; i < b.iterations; i++ ) {
339-
x = randu();
340-
y = dist.logpdf( x );
403+
y = dist.logpdf( x[ i % len ] );
341404
if ( isnan( y ) ) {
342405
b.fail( 'should not return NaN' );
343406
}
@@ -354,18 +417,23 @@ bench( pkg+':pdf', function benchmark( b ) {
354417
var alpha;
355418
var beta;
356419
var dist;
420+
var len;
357421
var x;
358422
var y;
359423
var i;
360424

361425
alpha = 100.56789;
362426
beta = 55.54321;
363427
dist = new BetaPrime( alpha, beta );
428+
len = 100;
429+
x = new Float64Array( len );
430+
for ( i = 0; i < len; i++ ) {
431+
x[ i ] = uniform( 0.0, 1.0 );
432+
}
364433

365434
b.tic();
366435
for ( i = 0; i < b.iterations; i++ ) {
367-
x = randu();
368-
y = dist.pdf( x );
436+
y = dist.pdf( x[ i % len ] );
369437
if ( isnan( y ) ) {
370438
b.fail( 'should not return NaN' );
371439
}
@@ -382,18 +450,23 @@ bench( pkg+':quantile', function benchmark( b ) {
382450
var alpha;
383451
var beta;
384452
var dist;
453+
var len;
385454
var x;
386455
var y;
387456
var i;
388457

389458
alpha = 100.56789;
390459
beta = 55.54321;
391460
dist = new BetaPrime( alpha, beta );
461+
len = 100;
462+
x = new Float64Array( len );
463+
for ( i = 0; i < len; i++ ) {
464+
x[ i ] = uniform( 0.0, 1.0 );
465+
}
392466

393467
b.tic();
394468
for ( i = 0; i < b.iterations; i++ ) {
395-
x = randu();
396-
y = dist.quantile( x );
469+
y = dist.quantile( x[ i % len ] );
397470
if ( isnan( y ) ) {
398471
b.fail( 'should not return NaN' );
399472
}

0 commit comments

Comments
 (0)