Skip to content

Commit b226ffa

Browse files
feat(add c implementation): add stats/base/dists/bernoulli/kurtosis
1 parent 0bf689f commit b226ffa

File tree

8 files changed

+97
-23
lines changed

8 files changed

+97
-23
lines changed

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ double out = stdlib_base_dists_bernoulli_kurtosis( 0.1 );
157157

158158
The function accepts the following arguments:
159159

160-
- **p**: `[in] double` maximum support.
160+
- **p**: `[in] double` success probability.
161161

162162
```c
163163
double stdlib_base_dists_bernoulli_kurtosis( const double p );
@@ -192,8 +192,8 @@ int main( void ) {
192192
int i;
193193
194194
for ( i = 0; i < 25; i++ ) {
195-
p = ( (double)rand() / (double)RAND_MAX );
196-
y = stdlib_base_dists_arcsine_entropy( p );
195+
p = (double)rand() / ( (double)RAND_MAX + 1.0 );
196+
y = stdlib_base_dists_bernoulli_kurtosis( p );
197197
printf( "p: %lf, Kurt(X;p): %lf\n", p, y );
198198
}
199199
}

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/benchmark/benchmark.js

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

2323
var bench = require( '@stdlib/bench' );
24+
var Float64Array = require( '@stdlib/array/float64' );
2425
var randu = require( '@stdlib/random/base/randu' );
2526
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2627
var pkg = require( './../package.json' ).name;
@@ -30,14 +31,20 @@ var kurtosis = require( './../lib' );
3031
// MAIN //
3132

3233
bench( pkg, function benchmark( b ) {
34+
var len;
3335
var p;
3436
var y;
3537
var i;
3638

39+
len = 100;
40+
p = new Float64Array( len );
41+
for ( i = 0; i < len; i++ ) {
42+
p[ i ] = randu();
43+
}
44+
3745
b.tic();
3846
for ( i = 0; i < b.iterations; i++ ) {
39-
p = randu();
40-
y = kurtosis( p );
47+
y = kurtosis( p[ i%len ] );
4148
if ( isnan( y ) ) {
4249
b.fail( 'should not return NaN' );
4350
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2024 The Stdlib Authors.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
'use strict';
20+
21+
// MODULES //
22+
23+
var resolve = require( 'path' ).resolve;
24+
var bench = require( '@stdlib/bench' );
25+
var Float64Array = require( '@stdlib/array/float64' );
26+
var randu = require( '@stdlib/random/base/randu' );
27+
var isnan = require( '@stdlib/math/base/assert/is-nan' );
28+
var tryRequire = require( '@stdlib/utils/try-require' );
29+
var pkg = require( './../package.json' ).name;
30+
31+
32+
// VARIABLES //
33+
34+
var kurtosis = tryRequire( resolve( __dirname, './../lib/native.js' ) );
35+
var opts = {
36+
'skip': ( kurtosis instanceof Error )
37+
};
38+
39+
40+
// MAIN //
41+
42+
bench( pkg+'::native', opts, function benchmark( b ) {
43+
var len;
44+
var p;
45+
var y;
46+
var i;
47+
48+
len = 100;
49+
p = new Float64Array( len );
50+
for ( i = 0; i < len; i++ ) {
51+
p[ i ] = randu();
52+
}
53+
54+
b.tic();
55+
for ( i = 0; i < b.iterations; i++ ) {
56+
y = kurtosis( p[ i % len ] );
57+
if ( isnan( y ) ) {
58+
b.fail( 'should not return NaN' );
59+
}
60+
}
61+
b.toc();
62+
if ( isnan( y ) ) {
63+
b.fail( 'should not return NaN' );
64+
}
65+
b.pass( 'benchmark finished' );
66+
b.end();
67+
});

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/benchmark/c/benchmark.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,18 @@ static double rand_double( void ) {
9191
*/
9292
static double benchmark( void ) {
9393
double elapsed;
94-
double p;
94+
double p[ 100 ];
9595
double y;
9696
double t;
9797
int i;
9898

99+
for ( i = 0; i < 100; i++ ) {
100+
p[ i ] = rand_double();
101+
}
102+
99103
t = tic();
100104
for ( i = 0; i < ITERATIONS; i++ ) {
101-
p = ( (double)rand() / (double)RAND_MAX ) ;
102-
y = stdlib_base_dists_bernoulli_kurtosis( p );
105+
y = stdlib_base_dists_bernoulli_kurtosis( p[ i%100 ] );
103106
if ( y != y ) {
104107
printf( "should not return NaN\n" );
105108
break;
@@ -130,4 +133,4 @@ int main( void ) {
130133
printf( "ok %d benchmark finished\n", i+1 );
131134
}
132135
print_summary( REPEATS, REPEATS );
133-
}
136+
}

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/examples/c/example.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ int main( void ) {
2626
int i;
2727

2828
for ( i = 0; i < 25; i++ ) {
29-
p = ( (double)rand() / (double)RAND_MAX );
29+
p = (double)rand() / ( (double)RAND_MAX + 1.0 );
3030
y = stdlib_base_dists_bernoulli_kurtosis( p );
31-
printf( "x: %lf , H(X;p): %lf\n", p, y );
31+
printf( "x: %lf , Kurt(X;p): %lf\n", p, y );
3232
}
3333
}

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/lib/native.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,17 @@ var addon = require( './../src/addon.node' );
2828
/**
2929
* Returns the kurtosis of a Bernoulli distribution.
3030
*
31+
* @private
3132
* @param {Probability} p - success probability
3233
* @returns {PositiveNumber} kurtosis
3334
*
3435
* @example
3536
* var v = kurtosis( 0.1 );
36-
* // returns ~0.325
37+
* // returns ~5.111
3738
*
3839
* @example
3940
* var v = kurtosis( 0.5 );
40-
* // returns ~0.693
41-
*
42-
* @example
43-
* var v = kurtosis( 0.9 );
44-
* // returns ~0.325
41+
* // returns -2.0
4542
*
4643
* @example
4744
* var v = kurtosis( 1.1 );

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,4 @@
7373
]
7474
}
7575
]
76-
}
76+
}

lib/node_modules/@stdlib/stats/base/dists/bernoulli/kurtosis/test/test.native.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,19 @@ var opts = {
4545

4646
// TESTS //
4747

48-
tape( 'main export is a function', function test( t ) {
48+
tape( 'main export is a function', opts, function test( t ) {
4949
t.ok( true, __filename );
5050
t.strictEqual( typeof kurtosis, 'function', 'main export is a function' );
5151
t.end();
5252
});
5353

54-
tape( 'if provided `NaN` for `p`, the function returns `NaN`', function test( t ) {
54+
tape( 'if provided `NaN` for `p`, the function returns `NaN`', opts, function test( t ) {
5555
var v = kurtosis( NaN );
5656
t.equal( isnan( v ), true, 'returns NaN' );
5757
t.end();
5858
});
5959

60-
tape( 'if provided `1` or `0` for `p`, the function returns `+infinity`', function test( t ) {
60+
tape( 'if provided `1` or `0` for `p`, the function returns `+infinity`', opts, function test( t ) {
6161
var v = kurtosis( 0.0 );
6262
t.strictEqual( v, PINF, 'returns +infinity' );
6363

@@ -67,7 +67,7 @@ tape( 'if provided `1` or `0` for `p`, the function returns `+infinity`', functi
6767
t.end();
6868
});
6969

70-
tape( 'if provided a success probability `p` outside of `[0,1]`, the function returns `NaN`', function test( t ) {
70+
tape( 'if provided a success probability `p` outside of `[0,1]`, the function returns `NaN`', opts, function test( t ) {
7171
var v;
7272

7373
v = kurtosis( -1.0 );
@@ -85,7 +85,7 @@ tape( 'if provided a success probability `p` outside of `[0,1]`, the function re
8585
t.end();
8686
});
8787

88-
tape( 'the function returns the excess kurtosis of a Bernoulli distribution', function test( t ) {
88+
tape( 'the function returns the excess kurtosis of a Bernoulli distribution', opts, function test( t ) {
8989
var expected;
9090
var delta;
9191
var tol;

0 commit comments

Comments
 (0)