std::comp_ellint_3, std::comp_ellint_3f, std::comp_ellint_3l

出自cppreference.com
 
 
 
 
在標頭 <cmath> 定義
(1)
float       comp_ellint_3 ( float k, float nu );

double      comp_ellint_3 ( double k, double nu );

long double comp_ellint_3 ( long double k, long double nu );
(C++17 起)
(C++23 前)
/* 浮點數類型 */ comp_ellint_3( /* 浮點數類型 */ k,
                                         /* 浮點數類型 */ nu );
(C++23 起)
float       comp_ellint_3f( float k, float nu );
(2) (C++17 起)
long double comp_ellint_3l( long double k, long double nu );
(3) (C++17 起)
在標頭 <cmath> 定義
template< class Arithmetic1, class Arithmetic2 >

/* common-浮點數類型 */

    comp_ellint_3( Arithmetic1 k, Arithmetic2 nu );
(A) (C++17 起)
1-3) 計算參數 knu第三類完全橢圓積分標準庫提供所有以無 cv 限定的浮點數類型作為形參 knu 的類型的 std::comp_ellint_3 重載。(C++23 起)
A) 為算術類型的所有其他組合提供額外重載。

目錄

[編輯] 參數

k - 橢圓模或離心率(浮點數或整數)
nu - 橢圓特徵(浮點數或整數)

[編輯] 返回值

如果沒有發生錯誤,那麼返回 kn 的第三類完全橢圓積分的值,即 std::ellint_3(k, n, π/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

額外重載不需要嚴格以 (A) 的形式提供。它們只需要能夠對它們的第一個實參 num1 和第二個實參 num2 滿足以下要求即可:

  • 如果 num1num2 具有 long double 類型,那麼 std::comp_ellint_3(num1, num2)std::comp_ellint_3(static_cast<long double>(num1),
                       static_cast<long double>(num2))
    的效果相同。
  • 否則,如果 num1 和/或 num2 具有 double 或整數類型,那麼 std::comp_ellint_3(num1, num2)std::comp_ellint_3(static_cast<double>(num1),
                       static_cast<double>(num2))
    的效果相同。
  • 否則,如果 num1num2 具有 float 類型,那麼 std::comp_ellint_3(num1, num2)std::comp_ellint_3(static_cast<float>(num1),
                       static_cast<float>(num2))
    的效果相同。
(C++23 前)

如果 num1num2 具有算術類型,那麼 std::comp_ellint_3(num1, num2)std::comp_ellint_3(static_cast</* 公共浮點數類型 */>(num1),
                   static_cast</* 公共浮點數類型 */>(num2))
的效果相同,其中 /* 公共浮點數類型 */num1num2 的類型中浮點數轉換等級浮點數轉換子等級最高的浮點數類型,整數類型的實參被視為具有與 double 相等的浮點數轉換等級。

如果不存在等級和子等級最高的浮點數類型,那麼在重載決議時不會從提供的重載中產生可用的候選。

(C++23 起)

[編輯] 示例

#include <cmath>
#include <iostream>
 
int main()
{
    std::cout << std::fixed
              << "Π(0.5,0) = " << std::comp_ellint_3(0.5, 0) << '\n'
              << "K(0.5)   = " << std::comp_ellint_1(0.5) << '\n'
              << "Π(0,0)   = " << std::comp_ellint_3(0, 0) << '\n'
              << "π/2      = " << std::acos(-1) / 2 << '\n'
              << "Π(0.5,1) = " << std::comp_ellint_3(0.5, 1) << '\n';
}

輸出:

Π(0.5,0) = 1.685750
K(0.5)   = 1.685750
Π(0,0)   = 1.570796
π/2      = 1.570796
Π(0.5,1) = inf

[編輯] 參閱

(C++17)(C++17)(C++17)
第三類(不完全)橢圓積分
(函數) [編輯]

[編輯] 外部鏈接

Weisstein, Eric W. 「第三類橢圓積分」來自 MathWorld--A Wolfram Web Resource。