std:: cyl_bessel_i, std:: cyl_bessel_if, std:: cyl_bessel_il

From cppreference.com
Defined in header <cmath>
(1)
float cyl_bessel_i ( float nu, float x ) ;

double cyl_bessel_i ( double nu, double x ) ;

long double cyl_bessel_i ( long double nu, long double x ) ;
(since C++17)
(until C++23)
/* floating-point-type */ cyl_bessel_i ( /* floating-point-type */ nu,
/* floating-point-type */ x ) ;
(since C++23)
float cyl_bessel_if ( float nu, float x ) ;
(2) (since C++17)
long double cyl_bessel_il ( long double nu, long double x ) ;
(3) (since C++17)
Defined in header <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

cyl_bessel_i ( Arithmetic1 nu, Arithmetic2 x ) ;
(A) (since C++17)
1-3) Computes the regular modified cylindrical Bessel function of nu and x . The library provides overloads of std::cyl_bessel_i for all cv-unqualified floating-point types as the type of the parameters nu and x . (since C++23)
A) Additional overloads are provided for all other combinations of arithmetic types.

Parameters

nu - the order of the function
x - the argument of the function

Return value

If no errors occur, value of the regular modified cylindrical Bessel function of nu and x , that is I nu (x) = Σ ∞k=0
(x/2) nu+2k
k!Γ(nu+k+1)
(for x≥0 ), is returned.

Error handling

Errors may be reported as specified in math_errhandling .

  • If the argument is NaN, NaN is returned and domain error is not reported.
  • If nu≥128 , the behavior is implementation-defined.

Notes

Implementations that do not support C++17, but support ISO 29124:2010 , provide this function if __STDCPP_MATH_SPEC_FUNCS__ is defined by the implementation to a value at least 201003L and if the user defines __STDCPP_WANT_MATH_SPEC_FUNCS__ before including any standard library headers.

Implementations that do not support ISO 29124:2010 but support TR 19768:2007 (TR1), provide this function in the header tr1/cmath and namespace std::tr1 .

An implementation of this function is also available in boost.math .

The additional overloads are not required to be provided exactly as (A) . They only need to be sufficient to ensure that for their first argument num1 and second argument num2 :

  • If num1 or num2 has type long double , then std :: cyl_bessel_i ( num1, num2 ) has the same effect as std :: cyl_bessel_i ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    .
  • Otherwise, if num1 and/or num2 has type double or an integer type, then std :: cyl_bessel_i ( num1, num2 ) has the same effect as std :: cyl_bessel_i ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • Otherwise, if num1 or num2 has type float , then std :: cyl_bessel_i ( num1, num2 ) has the same effect as std :: cyl_bessel_i ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(until C++23)

If num1 and num2 have arithmetic types, then std :: cyl_bessel_i ( num1, num2 ) has the same effect as std :: cyl_bessel_i ( static_cast < /* common-floating-point-type */ > ( num1 ) ,
static_cast < /* common-floating-point-type */ > ( num2 ) )
, where /* common-floating-point-type */ is the floating-point type with the greatest floating-point conversion rank and greatest floating-point conversion subrank between the types of num1 and num2 , arguments of integer type are considered to have the same floating-point conversion rank as double .

If no such floating-point type with the greatest rank and subrank exists, then overload resolution does not result in a usable candidate from the overloads provided.

(since C++23)

Example

#include <cmath>
#include <iostream>
 
int main()
{
    // spot check for nu == 0
    const double x = 1.2345;
    std::cout << "I_0(" << x << ") = " << std::cyl_bessel_i(0, x) << '\n';
 
    // series expansion for I_0
    double fct = 1;
    double sum = 0;
    for (int k = 0; k < 5; fct *= ++k)
    {
        sum += std::pow(x / 2, 2 * k) / std::pow(fct, 2);
        std::cout << "sum = " << sum << '\n';
    }
}

Output:

I_0(1.2345) = 1.41886
sum = 1
sum = 1.381
sum = 1.41729
sum = 1.41882
sum = 1.41886

See also

cylindrical Bessel functions (of the first kind)
(function)

External links

Weisstein, Eric W. "Modified Bessel Function of the First Kind." From MathWorld — A Wolfram Web Resource.