# 28 Numerics library [numerics]

## 28.7 Mathematical functions for floating-point types [c.math]

### 28.7.6 Mathematical special functions [sf.cmath]

#### 28.7.6.1 General [sf.cmath.general]

If any argument value to any of the functions specified in [sf.cmath] is a NaN (Not a Number), the function shall return a NaN but it shall not report a domain error.
Otherwise, the function shall report a domain error for just those argument values for which:
• the function description's Returns: element explicitly specifies a domain and those argument values fall outside the specified domain, or
• the corresponding mathematical function value has a nonzero imaginary component, or
• the corresponding mathematical function is not mathematically defined.237
Unless otherwise specified, each function is defined for all finite values, for negative infinity, and for positive infinity.
237)237)
A mathematical function is mathematically defined for a given set of argument values (a) if it is explicitly defined for that set of argument values, or (b) if its limiting value exists and does not depend on the direction of approach.

#### 28.7.6.2 Associated Laguerre polynomials [sf.cmath.assoc.laguerre]

```floating-point-type assoc_laguerre(unsigned n, unsigned m, floating-point-type x); float assoc_laguerref(unsigned n, unsigned m, float x); long double assoc_laguerrel(unsigned n, unsigned m, long double x); ```
Effects: These functions compute the associated Laguerre polynomials of their respective arguments n, m, and x.
Returns:
where n is n, m is m, and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if n >= 128 or if m >= 128.

#### 28.7.6.3 Associated Legendre functions [sf.cmath.assoc.legendre]

```floating-point-type assoc_legendre(unsigned l, unsigned m, floating-point-type x); float assoc_legendref(unsigned l, unsigned m, float x); long double assoc_legendrel(unsigned l, unsigned m, long double x); ```
Effects: These functions compute the associated Legendre functions of their respective arguments l, m, and x.
Returns:
where l is l, m is m, and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if l >= 128.

#### 28.7.6.4 Beta function [sf.cmath.beta]

```floating-point-type beta(floating-point-type x, floating-point-type y); float betaf(float x, float y); long double betal(long double x, long double y); ```
Effects: These functions compute the beta function of their respective arguments x and y.
Returns:
where x is x and y is y.

#### 28.7.6.5 Complete elliptic integral of the first kind [sf.cmath.comp.ellint.1]

```floating-point-type comp_ellint_1(floating-point-type k); float comp_ellint_1f(float k); long double comp_ellint_1l(long double k); ```
Effects: These functions compute the complete elliptic integral of the first kind of their respective arguments k.
Returns:
where k is k.

#### 28.7.6.6 Complete elliptic integral of the second kind [sf.cmath.comp.ellint.2]

```floating-point-type comp_ellint_2(floating-point-type k); float comp_ellint_2f(float k); long double comp_ellint_2l(long double k); ```
Effects: These functions compute the complete elliptic integral of the second kind of their respective arguments k.
Returns:
where k is k.

#### 28.7.6.7 Complete elliptic integral of the third kind [sf.cmath.comp.ellint.3]

```floating-point-type comp_ellint_3(floating-point-type k, floating-point-type nu); float comp_ellint_3f(float k, float nu); long double comp_ellint_3l(long double k, long double nu); ```
Effects: These functions compute the complete elliptic integral of the third kind of their respective arguments k and nu.
Returns:
where k is k and Î½ is nu.

#### 28.7.6.8 Regular modified cylindrical Bessel functions [sf.cmath.cyl.bessel.i]

```floating-point-type cyl_bessel_i(floating-point-type nu, floating-point-type x); float cyl_bessel_if(float nu, float x); long double cyl_bessel_il(long double nu, long double x); ```
Effects: These functions compute the regular modified cylindrical Bessel functions of their respective arguments nu and x.
Returns:
where Î½ is nu and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if nu >= 128.

#### 28.7.6.9 Cylindrical Bessel functions of the first kind [sf.cmath.cyl.bessel.j]

```floating-point-type cyl_bessel_j(floating-point-type nu, floating-point-type x); float cyl_bessel_jf(float nu, float x); long double cyl_bessel_jl(long double nu, long double x); ```
Effects: These functions compute the cylindrical Bessel functions of the first kind of their respective arguments nu and x.
Returns:
where Î½ is nu and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if nu >= 128.

#### 28.7.6.10 Irregular modified cylindrical Bessel functions [sf.cmath.cyl.bessel.k]

```floating-point-type cyl_bessel_k(floating-point-type nu, floating-point-type x); float cyl_bessel_kf(float nu, float x); long double cyl_bessel_kl(long double nu, long double x); ```
Effects: These functions compute the irregular modified cylindrical Bessel functions of their respective arguments nu and x.
Returns:
where Î½ is nu and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if nu >= 128.

#### 28.7.6.11 Cylindrical Neumann functions [sf.cmath.cyl.neumann]

```floating-point-type cyl_neumann(floating-point-type nu, floating-point-type x); float cyl_neumannf(float nu, float x); long double cyl_neumannl(long double nu, long double x); ```
Effects: These functions compute the cylindrical Neumann functions, also known as the cylindrical Bessel functions of the second kind, of their respective arguments nu and x.
Returns:
where Î½ is nu and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if nu >= 128.

#### 28.7.6.12 Incomplete elliptic integral of the first kind [sf.cmath.ellint.1]

```floating-point-type ellint_1(floating-point-type k, floating-point-type phi); float ellint_1f(float k, float phi); long double ellint_1l(long double k, long double phi); ```
Effects: These functions compute the incomplete elliptic integral of the first kind of their respective arguments k and phi (phi measured in radians).
Returns:
where k is k and Ï† is phi.

#### 28.7.6.13 Incomplete elliptic integral of the second kind [sf.cmath.ellint.2]

```floating-point-type ellint_2(floating-point-type k, floating-point-type phi); float ellint_2f(float k, float phi); long double ellint_2l(long double k, long double phi); ```
Effects: These functions compute the incomplete elliptic integral of the second kind of their respective arguments k and phi (phi measured in radians).
Returns:
where k is k and Ï† is phi.

#### 28.7.6.14 Incomplete elliptic integral of the third kind [sf.cmath.ellint.3]

```floating-point-type ellint_3(floating-point-type k, floating-point-type nu, floating-point-type phi); float ellint_3f(float k, float nu, float phi); long double ellint_3l(long double k, long double nu, long double phi); ```
Effects: These functions compute the incomplete elliptic integral of the third kind of their respective arguments k, nu, and phi (phi measured in radians).
Returns:
where Î½ is nu, k is k, and Ï† is phi.

#### 28.7.6.15 Exponential integral [sf.cmath.expint]

```floating-point-type expint(floating-point-type x); float expintf(float x); long double expintl(long double x); ```
Effects: These functions compute the exponential integral of their respective arguments x.
Returns:
where x is x.

#### 28.7.6.16 Hermite polynomials [sf.cmath.hermite]

```floating-point-type hermite(unsigned n, floating-point-type x); float hermitef(unsigned n, float x); long double hermitel(unsigned n, long double x); ```
Effects: These functions compute the Hermite polynomials of their respective arguments n and x.
Returns:
where n is n and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if n >= 128.

#### 28.7.6.17 Laguerre polynomials [sf.cmath.laguerre]

```floating-point-type laguerre(unsigned n, floating-point-type x); float laguerref(unsigned n, float x); long double laguerrel(unsigned n, long double x); ```
Effects: These functions compute the Laguerre polynomials of their respective arguments n and x.
Returns:
where n is n and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if n >= 128.

#### 28.7.6.18 Legendre polynomials [sf.cmath.legendre]

```floating-point-type legendre(unsigned l, floating-point-type x); float legendref(unsigned l, float x); long double legendrel(unsigned l, long double x); ```
Effects: These functions compute the Legendre polynomials of their respective arguments l and x.
Returns:
where l is l and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if l >= 128.

#### 28.7.6.19 Riemann zeta function [sf.cmath.riemann.zeta]

```floating-point-type riemann_zeta(floating-point-type x); float riemann_zetaf(float x); long double riemann_zetal(long double x); ```
Effects: These functions compute the Riemann zeta function of their respective arguments x.
Returns:
where x is x.

#### 28.7.6.20 Spherical Bessel functions of the first kind [sf.cmath.sph.bessel]

```floating-point-type sph_bessel(unsigned n, floating-point-type x); float sph_besself(unsigned n, float x); long double sph_bessell(unsigned n, long double x); ```
Effects: These functions compute the spherical Bessel functions of the first kind of their respective arguments n and x.
Returns:
where n is n and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if n >= 128.

#### 28.7.6.21 Spherical associated Legendre functions [sf.cmath.sph.legendre]

```floating-point-type sph_legendre(unsigned l, unsigned m, floating-point-type theta); float sph_legendref(unsigned l, unsigned m, float theta); long double sph_legendrel(unsigned l, unsigned m, long double theta); ```
Effects: These functions compute the spherical associated Legendre functions of their respective arguments l, m, and theta (theta measured in radians).
Returns:
where
and l is l, m is m, and Î¸ is theta.
Remarks: The effect of calling each of these functions is implementation-defined if l >= 128.

#### 28.7.6.22 Spherical Neumann functions [sf.cmath.sph.neumann]

```floating-point-type sph_neumann(unsigned n, floating-point-type x); float sph_neumannf(unsigned n, float x); long double sph_neumannl(unsigned n, long double x); ```
Effects: These functions compute the spherical Neumann functions, also known as the spherical Bessel functions of the second kind, of their respective arguments n and x.
Returns:
where n is n and x is x.
Remarks: The effect of calling each of these functions is implementation-defined if n >= 128.