Namespaces
Variants

std:: comp_ellint_2, std:: comp_ellint_2f, std:: comp_ellint_2l

From cppreference.net
Определено в заголовке <cmath>
(1)
float comp_ellint_2 ( float k ) ;

double comp_ellint_2 ( double k ) ;

long double comp_ellint_2 ( long double k ) ;
(начиная с C++17)
(до C++23)
/* floating-point-type */ comp_ellint_2 ( /* floating-point-type */ k ) ;
(начиная с C++23)
float comp_ellint_2f ( float k ) ;
(2) (начиная с C++17)
long double comp_ellint_2l ( long double k ) ;
(3) (начиная с C++17)
Определено в заголовке <cmath>
template < class Integer >
double comp_ellint_2 ( Integer k ) ;
(A) (начиная с C++17)
1-3) Вычисляет полный эллиптический интеграл второго рода от k . Библиотека предоставляет перегрузки std::comp_ellint_2 для всех неквалифицированных cv типов с плавающей запятой в качестве типа параметра k . (начиная с C++23)
A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые обрабатываются как double .

Содержание

Параметры

k - эллиптический модуль или эксцентриситет (значение с плавающей точкой или целое число)

Возвращаемое значение

Если ошибок не возникает, возвращается значение полного эллиптического интеграла второго рода от k , то есть std::ellint_2(k, π/2) .

Обработка ошибок

Ошибки могут сообщаться, как указано в math_errhandling .

  • Если аргумент равен NaN, возвращается NaN и ошибка домена не сообщается.
  • Если |k|>1 , может произойти ошибка домена.

Примечания

Реализации, которые не поддерживают C++17, но поддерживают ISO 29124:2010 , предоставляют эту функцию, если __STDCPP_MATH_SPEC_FUNCS__ определено реализацией со значением не менее 201003L и если пользователь определяет __STDCPP_WANT_MATH_SPEC_FUNCS__ до включения любых заголовков стандартной библиотеки.

Реализации, не поддерживающие ISO 29124:2010, но поддерживающие TR 19768:2007 (TR1), предоставляют эту функцию в заголовочном файле tr1/cmath и пространстве имен std::tr1 .

Реализация этой функции также доступна в boost.math .

Периметр эллипса с эксцентриситетом k и большой полуосью a равен 4aE(k) , где E представляет std::comp_ellint_2 . При нулевом эксцентриситете 0 эллипс вырождается в окружность радиуса a с периметром 2πa , поэтому E(0) = π/2 . При эксцентриситете 1 эллипс вырождается в отрезок длиной 2a с периметром 4a , следовательно E(1) = 1 .

Дополнительные перегрузки не обязаны быть предоставлены в точности как (A) . Они лишь должны быть достаточными для обеспечения того, чтобы для их аргумента num целочисленного типа, std :: comp_ellint_2 ( num ) имел тот же эффект, что и std :: comp_ellint_2 ( static_cast < double > ( num ) ) .

Пример

#include <cmath>
#include <iostream>
#include <numbers>
int main()
{
    constexpr double hpi = std::numbers::pi / 2.0;
    std::cout << "E(0) = " << std::comp_ellint_2(0) << '\n'
              << "π/2 = " << hpi << '\n'
              << "E(1) = " << std::comp_ellint_2(1) << '\n'
              << "E(1, π/2) = " << std::ellint_2(1, hpi) << '\n';
}

Вывод:

E(0) = 1.5708
π/2 = 1.5708
E(1) = 1
E(1, π/2) = 1

Смотрите также

(C++17) (C++17) (C++17)
(неполный) эллиптический интеграл второго рода
(функция)

Внешние ссылки

Вайсштейн, Эрик В. "Полный эллиптический интеграл второго рода." Из MathWorld — веб-ресурс Wolfram.