Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nearform/node-cephes
Implementation of special functions and distributions mathematical functions from the cephes library.
https://github.com/nearform/node-cephes
hacktoberfest
Last synced: 11 days ago
JSON representation
Implementation of special functions and distributions mathematical functions from the cephes library.
- Host: GitHub
- URL: https://github.com/nearform/node-cephes
- Owner: nearform
- License: other
- Created: 2018-08-27T09:40:56.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-06-17T02:21:59.000Z (5 months ago)
- Last Synced: 2024-10-01T23:05:44.841Z (about 1 month ago)
- Topics: hacktoberfest
- Language: C
- Homepage:
- Size: 501 KB
- Stars: 117
- Watchers: 99
- Forks: 9
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# node-cephes
This is a WebAssembly packaging of the [cephes library](http://www.netlib.org/cephes/).
The cephes library contains C implementations of most
[special functions](https://en.wikipedia.org/wiki/Special_functions),
[distributions](https://en.wikipedia.org/wiki/Probability_distribution),
and other hard-to-implement mathematical functions._Note that there are a few cephes functions that are not exposed here, as some
of them are quite hard to make consumable in JavaScript using WebAssembly. Feel
free to send a pull request if you need one of them._## Install
```
npm install cephes
```If you are looking on GitHub, you will notice some files are missing. These
are statically built from the cephes library. See the
[CONTRIBUTING.md](CONTRIBUTING.md) file, for how to build them.## Usage
Cephes is a WebAssembly module but is very small and fast to compile, as it
doesn't depend on any runtime libraries. In Node.js it is therefore compiled
synchronously and all you need to do is require the module.```js
const cephes = require('cephes'); // Node.js
```In the browser, it is, for good practice, compiled asynchronously. You must
therefore wait for the `.compiled` promise to be resolved.```js
const cephes = require('cephes'); // Browser
await cephes.compiled;
```Note that the `.compiled` promise is also available in Node.js, but it is
simply a dummy promise that resolves immediately.### The JavaScript interface
There are three variations of functions to be aware of:
#### 1. Plain numeric function
These don't require anything special.
```js
const value = cephes.zeta(2, 1);
```#### 2. Functions that return more than one value
In C, these functions return a primary value and then return extra value
using pointer arguments. In JavaScript this is implemented as a function
that returns an array of length 2. The first element is the primary returned
value, the second is an object of the extra returned values.```js
const [value, {ai, aip, bi, bip}] = cephes.airy(-1);
```#### 3. Functions that consumes an array
Some functions consumes an array of values, these must be `TypedArrays` of
the appropriate type. These functions will typically also require a variation
of `.length` value as a parameter, like you would do in C. Be aware, that in
some cases it may not be exactly the `.length` of the `TypedArray`, but may be
one less or one more. Check the specific function documentation to be sure.```js
const arrayInput = new Float64Array([2.2, 3.3, 4.4]);
const value = ephes.polevl(1.1, arrayInput, arrayInput.length - 1);
```## Table of Content
Function
Description
Documentation
Arithmetic and Algebraic
signbit(x)
Returns the sign bit
c-doc • js-doc
isnan(x)
Check if Not-A-Number
c-doc • js-doc
isfinite(x)
Check if finite
c-doc • js-doc
cbrt(x)
Cube root
c-doc • js-doc
polevl(x, coef, N)
Evaluate polynomial
c-doc • js-doc
chbevl(x, array, n)
Evaluate Chebyshev series
c-doc • js-doc
round(x)
Round to nearest integer value
c-doc • js-doc
frexp(x)
Extract exponent
c-doc • js-doc
ldexp(x, pw2)
Add integer to exponent
c-doc • js-doc
Exponential and Trigonometric
expx2(x, sign)
Exponential of squared argument
c-doc • js-doc
radian(d, m, s)
Degrees, minutes, seconds to radians
c-doc • js-doc
sincos(x, flg)
Circular sine and cosine of argument in degrees
c-doc • js-doc
cot(x)
Circular cotangent
c-doc • js-doc
cotdg(x)
Circular cotangent of argument in degrees
c-doc • js-doc
log1p(x)
Relative error approximations for log(1 + x)
c-doc • js-doc
expm1(x)
Relative error approximations for exp(x) - 1
c-doc • js-doc
cosm1(x)
Relative error approximations for cos(x) - 1
c-doc • js-doc
acos(x)
Arc cosine
c-doc • js-doc
acosh(x)
Arc hyperbolic cosine
c-doc • js-doc
asinh(xx)
Arc hyperbolic sine
c-doc • js-doc
atanh(x)
Arc hyperbolic tangent
c-doc • js-doc
asin(x)
Arcsine
c-doc • js-doc
atan(x)
Arctangent
c-doc • js-doc
atan2(y, x)
Quadrant correct arctangent
c-doc • js-doc
cosdg(x)
Cosine of arg in degrees
c-doc • js-doc
exp(x)
Exponential, base e
c-doc • js-doc
exp2(x)
Exponential, base 2
c-doc • js-doc
exp10(x)
Exponential, base 10
c-doc • js-doc
cosh(x)
Hyperbolic cosine
c-doc • js-doc
sinh(x)
Hyperbolic sine
c-doc • js-doc
tanh(x)
Hyperbolic tangent
c-doc • js-doc
log(x)
Logarithm, base e
c-doc • js-doc
log2(x)
Logarithm, base 2
c-doc • js-doc
log10(x)
Logarithm, base 10
c-doc • js-doc
pow(x, y)
Power
c-doc • js-doc
powi(x, nn)
Integer Power
c-doc • js-doc
sindg(x)
Sine of arg in degrees
c-doc • js-doc
tandg(x)
Tangent of arg in degrees
c-doc • js-doc
Exponential integral
ei(x)
Exponential integral
c-doc • js-doc
expn(n, x)
Exponential integral
c-doc • js-doc
shichi(x)
Hyperbolic cosine integral
c-doc • js-doc
sici(x)
Cosine integral
c-doc • js-doc
Gamma
lbeta(a, b)
Natural log of |beta|.
c-doc • js-doc
beta(a, b)
Beta
c-doc • js-doc
fac(i)
Factorial
c-doc • js-doc
lgam(x)
Logarithm of gamma function
c-doc • js-doc
incbet(aa, bb, xx)
Incomplete beta integral
c-doc • js-doc
incbi(aa, bb, yy0)
Inverse beta integral
c-doc • js-doc
igam(a, x)
Incomplete gamma integral
c-doc • js-doc
igamc(a, x)
Complemented gamma integral
c-doc • js-doc
igami(a, y0)
Inverse gamma integral
c-doc • js-doc
psi(x)
Psi (digamma) function
c-doc • js-doc
rgamma(x)
Reciprocal Gamma
c-doc • js-doc
Error function
erf(x)
Error function
c-doc • js-doc
erfc(a)
Complemented error function
c-doc • js-doc
dawsn(xx)
Dawson's integral
c-doc • js-doc
fresnl(xxa)
Fresnel integral
c-doc • js-doc
Bessel
airy(x)
Airy
c-doc • js-doc
j0(x)
Bessel, order 0
c-doc • js-doc
j1(x)
Bessel, order 1
c-doc • js-doc
jn(n, x)
Bessel, order n
c-doc • js-doc
jv(n, x)
Bessel, noninteger order
c-doc • js-doc
y0(x)
Bessel, second kind, order 0
c-doc • js-doc
y1(x)
Bessel, second kind, order 1
c-doc • js-doc
yn(n, x)
Bessel, second kind, order n
c-doc • js-doc
yv(v, x)
Bessel, noninteger order
c-doc • js-doc
i0(x)
Modified Bessel, order 0
c-doc • js-doc
i0e(x)
Exponentially scaled i0
c-doc • js-doc
i1(x)
Modified Bessel, order 1
c-doc • js-doc
i1e(x)
Exponentially scaled i1
c-doc • js-doc
iv(v, x)
Modified Bessel, nonint. order
c-doc • js-doc
k0(x)
Mod. Bessel, 3rd kind, order 0
c-doc • js-doc
k0e(x)
Exponentially scaled k0
c-doc • js-doc
k1(x)
Mod. Bessel, 3rd kind, order 1
c-doc • js-doc
k1e(x)
Exponentially scaled k1
c-doc • js-doc
kn(nn, x)
Mod. Bessel, 3rd kind, order n
c-doc • js-doc
Hypergeometric
hyperg(a, b, x)
Confluent hypergeometric
c-doc • js-doc
hyp2f1(a, b, c, x)
Gauss hypergeometric function
c-doc • js-doc
Elliptic
ellpe(x)
Complete elliptic integral
c-doc • js-doc
ellie(phi, m)
Incomplete elliptic integral
c-doc • js-doc
ellpk(x)
Complete elliptic integral
c-doc • js-doc
ellik(phi, m)
Incomplete elliptic integral
c-doc • js-doc
ellpj(u, m)
Jacobian elliptic function
c-doc • js-doc
Probability
btdtr(a, b, x)
Beta distribution
c-doc • js-doc
smirnov(n, e)
Exact Smirnov statistic, for one-sided test.
c-doc • js-doc
kolmogorov(y)
Kolmogorov's limiting distribution of two-sided test.
c-doc • js-doc
smirnovi(n, p)
Functional inverse of Smirnov distribution.
c-doc • js-doc
kolmogi(p)
Functional inverse of Kolmogorov statistic for two-sided test.
c-doc • js-doc
nbdtri(k, n, p)
Inverse Negative binomial distribution
c-doc • js-doc
stdtri(k, p)
Functional inverse of Student's t distribution
c-doc • js-doc
bdtr(k, n, p)
Binomial distribution
c-doc • js-doc
bdtrc(k, n, p)
Complemented binomial
c-doc • js-doc
bdtri(k, n, y)
Inverse binomial
c-doc • js-doc
chdtr(df, x)
Chi square distribution
c-doc • js-doc
chdtrc(df, x)
Complemented Chi square
c-doc • js-doc
chdtri(df, y)
Inverse Chi square
c-doc • js-doc
fdtr(ia, ib, x)
F distribution
c-doc • js-doc
fdtrc(ia, ib, x)
Complemented F
c-doc • js-doc
fdtri(ia, ib, y)
Inverse F distribution
c-doc • js-doc
gdtr(a, b, x)
Gamma distribution
c-doc • js-doc
gdtrc(a, b, x)
Complemented gamma
c-doc • js-doc
nbdtr(k, n, p)
Negative binomial distribution
c-doc • js-doc
nbdtrc(k, n, p)
Complemented negative binomial
c-doc • js-doc
ndtr(a)
Normal distribution
c-doc • js-doc
ndtri(y0)
Inverse normal distribution
c-doc • js-doc
pdtr(k, m)
Poisson distribution
c-doc • js-doc
pdtrc(k, m)
Complemented Poisson
c-doc • js-doc
pdtri(k, y)
Inverse Poisson distribution
c-doc • js-doc
stdtr(k, t)
Student's t distribution
c-doc • js-doc
Miscellaneous
plancki(w, T)
Integral of Planck's black body radiation formula
c-doc • js-doc
planckc(w, T)
Complemented Planck radiation integral
c-doc • js-doc
planckd(w, T)
Planck's black body radiation formula
c-doc • js-doc
planckw(T)
Wavelength, w, of maximum radiation at given temperature T.
c-doc • js-doc
spence(x)
Dilogarithm
c-doc • js-doc
zetac(x)
Riemann Zeta function
c-doc • js-doc
zeta(x, q)
Two argument zeta function
c-doc • js-doc
struve(v, x)
Struve function
c-doc • js-doc
Polynomials and Power Series
p1evl(x, coef, N)
Evaluate polynomial when coefficient of x is 1.0.
c-doc • js-doc
polylog(n, x)
The polylogarithm of order n
c-doc • js-doc## Documentation
### Arithmetic and Algebraic
#### int = cephes.signbit(x: double)
`signbit` is the "Returns the sign bit". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#signbit.
```js
const ret = cephes.signbit(x);
```#### int = cephes.isnan(x: double)
`isnan` is the "Check if Not-A-Number". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#isnan.
```js
const ret = cephes.isnan(x);
```#### int = cephes.isfinite(x: double)
`isfinite` is the "Check if finite". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#isfinite.
```js
const ret = cephes.isfinite(x);
```#### double = cephes.cbrt(x: double)
`cbrt` is the "Cube root". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cbrt.
```js
const ret = cephes.cbrt(x);
```#### double = cephes.polevl(x: double, coef: Float64Array, N: int)
`polevl` is the "Evaluate polynomial". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#polevl.
```js
const ret = cephes.polevl(x, new Float64Array(coef), N);
```#### double = cephes.chbevl(x: double, array: Float64Array, n: int)
`chbevl` is the "Evaluate Chebyshev series". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#chbevl.
```js
const ret = cephes.chbevl(x, new Float64Array(array), n);
```#### double = cephes.round(x: double)
`round` is the "Round to nearest integer value". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#round.
```js
const ret = cephes.round(x);
```#### [double, extra] = cephes.frexp(x: double)
`frexp` is the "Extract exponent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#frexp.
```js
const [ret, extra] = cephes.frexp(x);
```The `extra` object contains the following values:
```js
const {
pw2: int
} = extra;
```#### double = cephes.ldexp(x: double, pw2: int)
`ldexp` is the "Add integer to exponent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ldexp.
```js
const ret = cephes.ldexp(x, pw2);
```### Exponential and Trigonometric
#### double = cephes.expx2(x: double, sign: int)
`expx2` is the "Exponential of squared argument". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#expx2.
```js
const ret = cephes.expx2(x, sign);
```#### double = cephes.radian(d: double, m: double, s: double)
`radian` is the "Degrees, minutes, seconds to radians". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#radian.
```js
const ret = cephes.radian(d, m, s);
```#### [int, extra] = cephes.sincos(x: double, flg: int)
`sincos` is the "Circular sine and cosine of argument in degrees". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#sincos.
```js
const [ret, extra] = cephes.sincos(x, flg);
```The `extra` object contains the following values:
```js
const {
s: double,
c: double
} = extra;
```#### double = cephes.cot(x: double)
`cot` is the "Circular cotangent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cot.
```js
const ret = cephes.cot(x);
```#### double = cephes.cotdg(x: double)
`cotdg` is the "Circular cotangent of argument in degrees". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cotdg.
```js
const ret = cephes.cotdg(x);
```#### double = cephes.log1p(x: double)
`log1p` is the "Relative error approximations for log(1 + x)". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#log1p.
```js
const ret = cephes.log1p(x);
```#### double = cephes.expm1(x: double)
`expm1` is the "Relative error approximations for exp(x) - 1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#expm1.
```js
const ret = cephes.expm1(x);
```#### double = cephes.cosm1(x: double)
`cosm1` is the "Relative error approximations for cos(x) - 1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cosm1.
```js
const ret = cephes.cosm1(x);
```#### double = cephes.acos(x: double)
`acos` is the "Arc cosine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#acos.
```js
const ret = cephes.acos(x);
```#### double = cephes.acosh(x: double)
`acosh` is the "Arc hyperbolic cosine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#acosh.
```js
const ret = cephes.acosh(x);
```#### double = cephes.asinh(xx: double)
`asinh` is the "Arc hyperbolic sine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#asinh.
```js
const ret = cephes.asinh(xx);
```#### double = cephes.atanh(x: double)
`atanh` is the "Arc hyperbolic tangent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#atanh.
```js
const ret = cephes.atanh(x);
```#### double = cephes.asin(x: double)
`asin` is the "Arcsine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#asin.
```js
const ret = cephes.asin(x);
```#### double = cephes.atan(x: double)
`atan` is the "Arctangent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#atan.
```js
const ret = cephes.atan(x);
```#### double = cephes.atan2(y: double, x: double)
`atan2` is the "Quadrant correct arctangent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#atan2.
```js
const ret = cephes.atan2(y, x);
```#### double = cephes.cos(x: double)
`cos` is the "Cosine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cos.
```js
const ret = cephes.cos(x);
```#### double = cephes.cosdg(x: double)
`cosdg` is the "Cosine of arg in degrees". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cosdg.
```js
const ret = cephes.cosdg(x);
```#### double = cephes.exp(x: double)
`exp` is the "Exponential, base e". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#exp.
```js
const ret = cephes.exp(x);
```#### double = cephes.exp2(x: double)
`exp2` is the "Exponential, base 2". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#exp2.
```js
const ret = cephes.exp2(x);
```#### double = cephes.exp10(x: double)
`exp10` is the "Exponential, base 10". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#exp10.
```js
const ret = cephes.exp10(x);
```#### double = cephes.cosh(x: double)
`cosh` is the "Hyperbolic cosine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#cosh.
```js
const ret = cephes.cosh(x);
```#### double = cephes.sinh(x: double)
`sinh` is the "Hyperbolic sine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#sinh.
```js
const ret = cephes.sinh(x);
```#### double = cephes.tanh(x: double)
`tanh` is the "Hyperbolic tangent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#tanh.
```js
const ret = cephes.tanh(x);
```#### double = cephes.log(x: double)
`log` is the "Logarithm, base e". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#log.
```js
const ret = cephes.log(x);
```#### double = cephes.log2(x: double)
`log2` is the "Logarithm, base 2". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#log2.
```js
const ret = cephes.log2(x);
```#### double = cephes.log10(x: double)
`log10` is the "Logarithm, base 10". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#log10.
```js
const ret = cephes.log10(x);
```#### double = cephes.pow(x: double, y: double)
`pow` is the "Power". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#pow.
```js
const ret = cephes.pow(x, y);
```#### double = cephes.powi(x: double, nn: int)
`powi` is the "Integer Power". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#powi.
```js
const ret = cephes.powi(x, nn);
```#### double = cephes.sin(x: double)
`sin` is the "Sine". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#sin.
```js
const ret = cephes.sin(x);
```#### double = cephes.sindg(x: double)
`sindg` is the "Sine of arg in degrees". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#sindg.
```js
const ret = cephes.sindg(x);
```#### double = cephes.tan(x: double)
`tan` is the "Tangent". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#tan.
```js
const ret = cephes.tan(x);
```#### double = cephes.tandg(x: double)
`tandg` is the "Tangent of arg in degrees". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#tandg.
```js
const ret = cephes.tandg(x);
```### Exponential integral
#### double = cephes.ei(x: double)
`ei` is the "Exponential integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ei.
```js
const ret = cephes.ei(x);
```#### double = cephes.expn(n: int, x: double)
`expn` is the "Exponential integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#expn.
```js
const ret = cephes.expn(n, x);
```#### [int, extra] = cephes.shichi(x: double)
`shichi` is the "Hyperbolic cosine integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#shichi.
```js
const [ret, extra] = cephes.shichi(x);
```The `extra` object contains the following values:
```js
const {
si: double,
ci: double
} = extra;
```#### [int, extra] = cephes.sici(x: double)
`sici` is the "Cosine integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#sici.
```js
const [ret, extra] = cephes.sici(x);
```The `extra` object contains the following values:
```js
const {
si: double,
ci: double
} = extra;
```### Gamma
#### double = cephes.lbeta(a: double, b: double)
`lbeta` is the "Natural log of |beta|.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#lbeta.
```js
const ret = cephes.lbeta(a, b);
```#### double = cephes.beta(a: double, b: double)
`beta` is the "Beta". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#beta.
```js
const ret = cephes.beta(a, b);
```#### double = cephes.fac(i: int)
`fac` is the "Factorial". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#fac.
```js
const ret = cephes.fac(i);
```#### double = cephes.gamma(x: double)
`gamma` is the "Gamma". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#gamma.
```js
const ret = cephes.gamma(x);
```#### double = cephes.lgam(x: double)
`lgam` is the "Logarithm of gamma function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#lgam.
```js
const ret = cephes.lgam(x);
```#### double = cephes.incbet(aa: double, bb: double, xx: double)
`incbet` is the "Incomplete beta integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#incbet.
```js
const ret = cephes.incbet(aa, bb, xx);
```#### double = cephes.incbi(aa: double, bb: double, yy0: double)
`incbi` is the "Inverse beta integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#incbi.
```js
const ret = cephes.incbi(aa, bb, yy0);
```#### double = cephes.igam(a: double, x: double)
`igam` is the "Incomplete gamma integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#igam.
```js
const ret = cephes.igam(a, x);
```#### double = cephes.igamc(a: double, x: double)
`igamc` is the "Complemented gamma integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#igamc.
```js
const ret = cephes.igamc(a, x);
```#### double = cephes.igami(a: double, y0: double)
`igami` is the "Inverse gamma integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#igami.
```js
const ret = cephes.igami(a, y0);
```#### double = cephes.psi(x: double)
`psi` is the "Psi (digamma) function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#psi.
```js
const ret = cephes.psi(x);
```#### double = cephes.rgamma(x: double)
`rgamma` is the "Reciprocal Gamma". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#rgamma.
```js
const ret = cephes.rgamma(x);
```### Error function
#### double = cephes.erf(x: double)
`erf` is the "Error function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#erf.
```js
const ret = cephes.erf(x);
```#### double = cephes.erfc(a: double)
`erfc` is the "Complemented error function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#erfc.
```js
const ret = cephes.erfc(a);
```#### double = cephes.dawsn(xx: double)
`dawsn` is the "Dawson's integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#dawsn.
```js
const ret = cephes.dawsn(xx);
```#### [int, extra] = cephes.fresnl(xxa: double)
`fresnl` is the "Fresnel integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#fresnl.
```js
const [ret, extra] = cephes.fresnl(xxa);
```The `extra` object contains the following values:
```js
const {
ssa: double,
cca: double
} = extra;
```### Bessel
#### [int, extra] = cephes.airy(x: double)
`airy` is the "Airy". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#airy.
```js
const [ret, extra] = cephes.airy(x);
```The `extra` object contains the following values:
```js
const {
ai: double,
aip: double,
bi: double,
bip: double
} = extra;
```#### double = cephes.j0(x: double)
`j0` is the "Bessel, order 0". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#j0.
```js
const ret = cephes.j0(x);
```#### double = cephes.j1(x: double)
`j1` is the "Bessel, order 1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#j1.
```js
const ret = cephes.j1(x);
```#### double = cephes.jn(n: int, x: double)
`jn` is the "Bessel, order n". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#jn.
```js
const ret = cephes.jn(n, x);
```#### double = cephes.jv(n: double, x: double)
`jv` is the "Bessel, noninteger order". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#jv.
```js
const ret = cephes.jv(n, x);
```#### double = cephes.y0(x: double)
`y0` is the "Bessel, second kind, order 0". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#y0.
```js
const ret = cephes.y0(x);
```#### double = cephes.y1(x: double)
`y1` is the "Bessel, second kind, order 1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#y1.
```js
const ret = cephes.y1(x);
```#### double = cephes.yn(n: int, x: double)
`yn` is the "Bessel, second kind, order n". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#yn.
```js
const ret = cephes.yn(n, x);
```#### double = cephes.yv(v: double, x: double)
`yv` is the "Bessel, noninteger order". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#yv.
```js
const ret = cephes.yv(v, x);
```#### double = cephes.i0(x: double)
`i0` is the "Modified Bessel, order 0". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#i0.
```js
const ret = cephes.i0(x);
```#### double = cephes.i0e(x: double)
`i0e` is the "Exponentially scaled i0". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#i0e.
```js
const ret = cephes.i0e(x);
```#### double = cephes.i1(x: double)
`i1` is the "Modified Bessel, order 1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#i1.
```js
const ret = cephes.i1(x);
```#### double = cephes.i1e(x: double)
`i1e` is the "Exponentially scaled i1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#i1e.
```js
const ret = cephes.i1e(x);
```#### double = cephes.iv(v: double, x: double)
`iv` is the "Modified Bessel, nonint. order". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#iv.
```js
const ret = cephes.iv(v, x);
```#### double = cephes.k0(x: double)
`k0` is the "Mod. Bessel, 3rd kind, order 0". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#k0.
```js
const ret = cephes.k0(x);
```#### double = cephes.k0e(x: double)
`k0e` is the "Exponentially scaled k0". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#k0e.
```js
const ret = cephes.k0e(x);
```#### double = cephes.k1(x: double)
`k1` is the "Mod. Bessel, 3rd kind, order 1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#k1.
```js
const ret = cephes.k1(x);
```#### double = cephes.k1e(x: double)
`k1e` is the "Exponentially scaled k1". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#k1e.
```js
const ret = cephes.k1e(x);
```#### double = cephes.kn(nn: int, x: double)
`kn` is the "Mod. Bessel, 3rd kind, order n". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#kn.
```js
const ret = cephes.kn(nn, x);
```### Hypergeometric
#### double = cephes.hyperg(a: double, b: double, x: double)
`hyperg` is the "Confluent hypergeometric". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#hyperg.
```js
const ret = cephes.hyperg(a, b, x);
```#### double = cephes.hyp2f1(a: double, b: double, c: double, x: double)
`hyp2f1` is the "Gauss hypergeometric function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#hyp2f1.
```js
const ret = cephes.hyp2f1(a, b, c, x);
```### Elliptic
#### double = cephes.ellpe(x: double)
`ellpe` is the "Complete elliptic integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ellpe.
```js
const ret = cephes.ellpe(x);
```#### double = cephes.ellie(phi: double, m: double)
`ellie` is the "Incomplete elliptic integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ellie.
```js
const ret = cephes.ellie(phi, m);
```#### double = cephes.ellpk(x: double)
`ellpk` is the "Complete elliptic integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ellpk.
```js
const ret = cephes.ellpk(x);
```#### double = cephes.ellik(phi: double, m: double)
`ellik` is the "Incomplete elliptic integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ellik.
```js
const ret = cephes.ellik(phi, m);
```#### [int, extra] = cephes.ellpj(u: double, m: double)
`ellpj` is the "Jacobian elliptic function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ellpj.
```js
const [ret, extra] = cephes.ellpj(u, m);
```The `extra` object contains the following values:
```js
const {
sn: double,
cn: double,
dn: double,
ph: double
} = extra;
```### Probability
#### double = cephes.btdtr(a: double, b: double, x: double)
`btdtr` is the "Beta distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#btdtr.
```js
const ret = cephes.btdtr(a, b, x);
```#### double = cephes.smirnov(n: int, e: double)
`smirnov` is the "Exact Smirnov statistic, for one-sided test.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#smirnov.
```js
const ret = cephes.smirnov(n, e);
```#### double = cephes.kolmogorov(y: double)
`kolmogorov` is the "Kolmogorov's limiting distribution of two-sided test.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#kolmogorov.
```js
const ret = cephes.kolmogorov(y);
```#### double = cephes.smirnovi(n: int, p: double)
`smirnovi` is the "Functional inverse of Smirnov distribution.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#smirnovi.
```js
const ret = cephes.smirnovi(n, p);
```#### double = cephes.kolmogi(p: double)
`kolmogi` is the "Functional inverse of Kolmogorov statistic for two-sided test.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#kolmogi.
```js
const ret = cephes.kolmogi(p);
```#### double = cephes.nbdtri(k: int, n: int, p: double)
`nbdtri` is the "Inverse Negative binomial distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#nbdtri.
```js
const ret = cephes.nbdtri(k, n, p);
```#### double = cephes.stdtri(k: int, p: double)
`stdtri` is the "Functional inverse of Student's t distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#stdtri.
```js
const ret = cephes.stdtri(k, p);
```#### double = cephes.bdtr(k: int, n: int, p: double)
`bdtr` is the "Binomial distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#bdtr.
```js
const ret = cephes.bdtr(k, n, p);
```#### double = cephes.bdtrc(k: int, n: int, p: double)
`bdtrc` is the "Complemented binomial". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#bdtrc.
```js
const ret = cephes.bdtrc(k, n, p);
```#### double = cephes.bdtri(k: int, n: int, y: double)
`bdtri` is the "Inverse binomial". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#bdtri.
```js
const ret = cephes.bdtri(k, n, y);
```#### double = cephes.chdtr(df: double, x: double)
`chdtr` is the "Chi square distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#chdtr.
```js
const ret = cephes.chdtr(df, x);
```#### double = cephes.chdtrc(df: double, x: double)
`chdtrc` is the "Complemented Chi square". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#chdtrc.
```js
const ret = cephes.chdtrc(df, x);
```#### double = cephes.chdtri(df: double, y: double)
`chdtri` is the "Inverse Chi square". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#chdtri.
```js
const ret = cephes.chdtri(df, y);
```#### double = cephes.fdtr(ia: int, ib: int, x: double)
`fdtr` is the "F distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#fdtr.
```js
const ret = cephes.fdtr(ia, ib, x);
```#### double = cephes.fdtrc(ia: int, ib: int, x: double)
`fdtrc` is the "Complemented F". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#fdtrc.
```js
const ret = cephes.fdtrc(ia, ib, x);
```#### double = cephes.fdtri(ia: int, ib: int, y: double)
`fdtri` is the "Inverse F distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#fdtri.
```js
const ret = cephes.fdtri(ia, ib, y);
```#### double = cephes.gdtr(a: double, b: double, x: double)
`gdtr` is the "Gamma distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#gdtr.
```js
const ret = cephes.gdtr(a, b, x);
```#### double = cephes.gdtrc(a: double, b: double, x: double)
`gdtrc` is the "Complemented gamma". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#gdtrc.
```js
const ret = cephes.gdtrc(a, b, x);
```#### double = cephes.nbdtr(k: int, n: int, p: double)
`nbdtr` is the "Negative binomial distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#nbdtr.
```js
const ret = cephes.nbdtr(k, n, p);
```#### double = cephes.nbdtrc(k: int, n: int, p: double)
`nbdtrc` is the "Complemented negative binomial". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#nbdtrc.
```js
const ret = cephes.nbdtrc(k, n, p);
```#### double = cephes.ndtr(a: double)
`ndtr` is the "Normal distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ndtr.
```js
const ret = cephes.ndtr(a);
```#### double = cephes.ndtri(y0: double)
`ndtri` is the "Inverse normal distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#ndtri.
```js
const ret = cephes.ndtri(y0);
```#### double = cephes.pdtr(k: int, m: double)
`pdtr` is the "Poisson distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#pdtr.
```js
const ret = cephes.pdtr(k, m);
```#### double = cephes.pdtrc(k: int, m: double)
`pdtrc` is the "Complemented Poisson". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#pdtrc.
```js
const ret = cephes.pdtrc(k, m);
```#### double = cephes.pdtri(k: int, y: double)
`pdtri` is the "Inverse Poisson distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#pdtri.
```js
const ret = cephes.pdtri(k, y);
```#### double = cephes.stdtr(k: int, t: double)
`stdtr` is the "Student's t distribution". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#stdtr.
```js
const ret = cephes.stdtr(k, t);
```### Miscellaneous
#### double = cephes.plancki(w: double, T: double)
`plancki` is the "Integral of Planck's black body radiation formula". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#plancki.
```js
const ret = cephes.plancki(w, T);
```#### double = cephes.planckc(w: double, T: double)
`planckc` is the "Complemented Planck radiation integral". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#planckc.
```js
const ret = cephes.planckc(w, T);
```#### double = cephes.planckd(w: double, T: double)
`planckd` is the "Planck's black body radiation formula". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#planckd.
```js
const ret = cephes.planckd(w, T);
```#### double = cephes.planckw(T: double)
`planckw` is the "Wavelength, w, of maximum radiation at given temperature T.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#planckw.
```js
const ret = cephes.planckw(T);
```#### double = cephes.spence(x: double)
`spence` is the "Dilogarithm". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#spence.
```js
const ret = cephes.spence(x);
```#### double = cephes.zetac(x: double)
`zetac` is the "Riemann Zeta function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#zetac.
```js
const ret = cephes.zetac(x);
```#### double = cephes.zeta(x: double, q: double)
`zeta` is the "Two argument zeta function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#zeta.
```js
const ret = cephes.zeta(x, q);
```#### double = cephes.struve(v: double, x: double)
`struve` is the "Struve function". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#struve.
```js
const ret = cephes.struve(v, x);
```### Polynomials and Power Series
#### double = cephes.p1evl(x: double, coef: Float64Array, N: int)
`p1evl` is the "Evaluate polynomial when coefficient of x is 1.0.". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#p1evl.
```js
const ret = cephes.p1evl(x, new Float64Array(coef), N);
```#### double = cephes.polylog(n: int, x: double)
`polylog` is the "The polylogarithm of order n". You can read the full documentation at http://www.netlib.org/cephes/doubldoc.html#polylog.
```js
const ret = cephes.polylog(n, x);
```## LICENSE
The cephes library, that this module wraps, can be found at
http://www.netlib.org/cephes/. The cephes library from the NetLib website,
doesn't have any license. However, the author Stephen Moshier, has kindly given
permission for it to be included in a BSD-licensed package.Please see the [LICENSE](LICENSE) file, for all the details.