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 のオーバーロードを、パラメータ k の型としてすべてのcv修飾されていない浮動小数点型に対して提供します。 (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)
第二種不完全楕円積分
(関数)

外部リンク

Weisstein, Eric W. "Complete Elliptic Integral of the Second Kind." From MathWorld — A Wolfram Web Resource.
Weisstein, Eric W. 「第二種完全楕円積分」 MathWorld — Wolfram Web リソースより