-
-
Notifications
You must be signed in to change notification settings - Fork 610
Commit
stats/base/dists/frechet/skewness
PR-URL: #4573 Closes: #3614 Co-authored-by: Philipp Burckhardt <[email protected]> Reviewed-by: Philipp Burckhardt <[email protected]>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -158,11 +158,104 @@ for ( i = 0; i < 10; i++ ) { | |
|
||
<!-- Section to include cited references. If references are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> | ||
|
||
<section class="references"> | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
<!-- C interface documentation. --> | ||
|
||
* * * | ||
|
||
<section class="c"> | ||
|
||
## C APIs | ||
|
||
<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. --> | ||
|
||
<section class="intro"> | ||
|
||
</section> | ||
|
||
<!-- /.intro --> | ||
|
||
<!-- C usage documentation. --> | ||
|
||
<section class="usage"> | ||
|
||
### Usage | ||
|
||
```c | ||
#include "stdlib/stats/base/dists/frechet/skewness.h" | ||
``` | ||
|
||
#### stdlib_base_dists_frechet_skewness( alpha, s, m ) | ||
|
||
Returns the skewness for a Fréchet distribution with shape `alpha`, scale `s`, and location `m`. | ||
|
||
```c | ||
double y = stdlib_base_frechet_skewness( 5.0, 2.0, 0.0 ); | ||
// returns ~3.535 | ||
``` | ||
|
||
The function accepts the following arguments: | ||
|
||
- **alpha**: `[in] double` shape parameter. | ||
- **s**: `[in] double` scale parameter. | ||
- **m**: `[in] double` location parameter. | ||
|
||
```c | ||
double stdlib_base_dists_frechet_skewness( const double alpha, const double s, const double m ); | ||
``` | ||
</section> | ||
<!-- /.usage --> | ||
<!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. --> | ||
<section class="notes"> | ||
</section> | ||
<!-- /.notes --> | ||
<!-- C API usage examples. --> | ||
<section class="examples"> | ||
### Examples | ||
```c | ||
#include "stdlib/stats/base/dists/frechet/skewness.h" | ||
#include "stdlib/constants/float64/eps.h" | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
static double random_uniform( const double min, const double max ) { | ||
double v = (double)rand() / ( (double)RAND_MAX + 1.0 ); | ||
return min + ( v*(max-min) ); | ||
} | ||
int main( void ) { | ||
double alpha; | ||
double s; | ||
double m; | ||
double y; | ||
int i; | ||
for ( i = 0; i < 10; i++ ) { | ||
alpha = random_uniform( 0.0, 20.0 ) + STDLIB_CONSTANT_FLOAT64_EPS; | ||
s = random_uniform( 0.0, 20.0 ) + STDLIB_CONSTANT_FLOAT64_EPS; | ||
m = random_uniform( 0.0, 20.0 ) - 40.0; | ||
This comment has been minimized.
Sorry, something went wrong.
kgryte
Member
|
||
y = stdlib_base_dists_frechet_skewness( alpha, s, m ); | ||
printf( "α: %.4lf, s: %.4lf, m: %.4lf, skew(X;α,s,m): %.4lf\n", alpha, s, m, y ); | ||
} | ||
} | ||
``` | ||
|
||
</section> | ||
|
||
<!-- /.examples --> | ||
|
||
</section> | ||
|
||
<!-- /.references --> | ||
<!-- /.c --> | ||
|
||
<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. --> | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/** | ||
* @license Apache-2.0 | ||
* | ||
* Copyright (c) 2025 The Stdlib Authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
'use strict'; | ||
|
||
// MODULES // | ||
|
||
var resolve = require( 'path' ).resolve; | ||
var bench = require( '@stdlib/bench' ); | ||
var Float64Array = require( '@stdlib/array/float64' ); | ||
var randu = require( '@stdlib/random/base/randu' ); | ||
var isnan = require( '@stdlib/math/base/assert/is-nan' ); | ||
var tryRequire = require( '@stdlib/utils/try-require' ); | ||
var EPS = require( '@stdlib/constants/float64/eps' ); | ||
var pkg = require( './../package.json' ).name; | ||
|
||
|
||
// VARIABLES // | ||
|
||
var skewness = tryRequire( resolve( __dirname, './../lib/native.js' ) ); | ||
var opts = { | ||
'skip': ( skewness instanceof Error ) | ||
}; | ||
|
||
|
||
// MAIN // | ||
|
||
bench( pkg+'::native', opts, function benchmark( b ) { | ||
var alpha; | ||
var len; | ||
var s; | ||
var m; | ||
var y; | ||
var i; | ||
|
||
len = 100; | ||
alpha = new Float64Array( len ); | ||
s = new Float64Array( len ); | ||
m = new Float64Array( len ); | ||
for ( i = 0; i < len; i++ ) { | ||
alpha[ i ] = ( randu()*20.0 ) + EPS; | ||
s[ i ] = ( randu()*20.0 ) + EPS; | ||
m[ i ] = ( randu()*20.0 ) - 40.0; | ||
} | ||
b.tic(); | ||
for ( i = 0; i < b.iterations; i++ ) { | ||
y = skewness( alpha[ i % len ], s[ i % len ], m[ i % len ] ); | ||
if ( isnan( y ) ) { | ||
b.fail( 'should not return NaN' ); | ||
} | ||
} | ||
b.toc(); | ||
if ( isnan( y ) ) { | ||
b.fail( 'should not return NaN' ); | ||
} | ||
b.pass( 'benchmark finished' ); | ||
b.end(); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
#/ | ||
# @license Apache-2.0 | ||
# | ||
# Copyright (c) 2025 The Stdlib Authors. | ||
# | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
#/ | ||
|
||
# VARIABLES # | ||
|
||
ifndef VERBOSE | ||
QUIET := @ | ||
else | ||
QUIET := | ||
endif | ||
|
||
# Determine the OS ([1][1], [2][2]). | ||
# | ||
# [1]: https://en.wikipedia.org/wiki/Uname#Examples | ||
# [2]: http://stackoverflow.com/a/27776822/2225624 | ||
OS ?= $(shell uname) | ||
ifneq (, $(findstring MINGW,$(OS))) | ||
OS := WINNT | ||
else | ||
ifneq (, $(findstring MSYS,$(OS))) | ||
OS := WINNT | ||
else | ||
ifneq (, $(findstring CYGWIN,$(OS))) | ||
OS := WINNT | ||
else | ||
ifneq (, $(findstring Windows_NT,$(OS))) | ||
OS := WINNT | ||
endif | ||
endif | ||
endif | ||
endif | ||
|
||
# Define the program used for compiling C source files: | ||
ifdef C_COMPILER | ||
CC := $(C_COMPILER) | ||
else | ||
CC := gcc | ||
endif | ||
|
||
# Define the command-line options when compiling C files: | ||
CFLAGS ?= \ | ||
-std=c99 \ | ||
-O3 \ | ||
-Wall \ | ||
-pedantic | ||
|
||
# Determine whether to generate position independent code ([1][1], [2][2]). | ||
# | ||
# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options | ||
# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option | ||
ifeq ($(OS), WINNT) | ||
fPIC ?= | ||
else | ||
fPIC ?= -fPIC | ||
endif | ||
|
||
# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`): | ||
INCLUDE ?= | ||
|
||
# List of source files: | ||
SOURCE_FILES ?= | ||
|
||
# List of libraries (e.g., `-lopenblas -lpthread`): | ||
LIBRARIES ?= | ||
|
||
# List of library paths (e.g., `-L /foo/bar -L /beep/boop`): | ||
LIBPATH ?= | ||
|
||
# List of C targets: | ||
c_targets := benchmark.out | ||
|
||
|
||
# RULES # | ||
|
||
#/ | ||
# Compiles source files. | ||
# | ||
# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`) | ||
# @param {string} [CFLAGS] - C compiler options | ||
# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) | ||
# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`) | ||
# @param {string} [SOURCE_FILES] - list of source files | ||
# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`) | ||
# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`) | ||
# | ||
# @example | ||
# make | ||
# | ||
# @example | ||
# make all | ||
#/ | ||
all: $(c_targets) | ||
|
||
.PHONY: all | ||
|
||
#/ | ||
# Compiles C source files. | ||
# | ||
# @private | ||
# @param {string} CC - C compiler (e.g., `gcc`) | ||
# @param {string} CFLAGS - C compiler options | ||
# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`) | ||
# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`) | ||
# @param {string} SOURCE_FILES - list of source files | ||
# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`) | ||
# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`) | ||
#/ | ||
$(c_targets): %.out: %.c | ||
$(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES) | ||
|
||
#/ | ||
# Runs compiled benchmarks. | ||
# | ||
# @example | ||
# make run | ||
#/ | ||
run: $(c_targets) | ||
$(QUIET) ./$< | ||
|
||
.PHONY: run | ||
|
||
#/ | ||
# Removes generated files. | ||
# | ||
# @example | ||
# make clean | ||
#/ | ||
clean: | ||
$(QUIET) -rm -f *.o *.out | ||
|
||
.PHONY: clean |
1 comment
on commit 3b44fd4
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Coverage Report
Package | Statements | Branches | Functions | Lines |
---|---|---|---|---|
stats/base/dists/frechet/skewness |
|
|
|
|
The above coverage report was generated for the changes in this push.
@Planeshifter The "references" section was removed, but the comment at L159 was not.