#include <boost/math/special_functions/ellint_2.hpp>
namespace boost { namespace math {
template <class T1, class T2>
calculated-result-type ellint_2(T1 k, T2 phi);
template <class T1, class T2, class Policy>
calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);
template <class T>
calculated-result-type ellint_2(T k);
template <class T, class Policy>
calculated-result-type ellint_2(T k, const Policy&);
}}
Эти две функции оценивают неполный эллиптический интеграл второго вида E(φ, k) и его полный аналог E(k) = E(π/2, k).

Тип возврата этих функций вычисляется с помощью правил расчета типа Результат, когда T1 и T2 разные типы: когда они одинаковый тип, результат такой же, как и аргументы.
template <class T1, class T2>
calculated-result-type ellint_2(T1 k, T2 phi);
template <class T1, class T2, class Policy>
calculated-result-type ellint_2(T1 k, T2 phi, const Policy&);
Возвращает неполный эллиптический интеграл второго вида E(φ, k):

Требуется -1 <=к <=1, в противном случае возвращается результат domain_error.
Окончательный аргумент Политика является необязательным и может использоваться для контроля поведения функции: как он обрабатывает ошибки, какой уровень точности использовать и т.д. См. документ политики для более подробной информации.
template <class T>
calculated-result-type ellint_2(T k);
template <class T>
calculated-result-type ellint_2(T k, const Policy&);
Возвращает полный эллиптический интеграл второго вида E(k):

Требуется -1 <=к <=1, в противном случае возвращается результат domain_error.
Окончательный аргумент Политика является необязательным и может использоваться для контроля поведения функции: как он обрабатывает ошибки, какой уровень точности использовать и т.д. См. документ политики для более подробной информации.
Эти функции вычисляются с использованием только базовых арифметических операций, поэтому нет большого изменения точности по сравнению с различными платформами. Обратите внимание, что только результаты для самого широкого типа плавающей точки в системе даны, поскольку более узкие типы имеют эффективно нулевые ошибки. Все значения являются относительными ошибками в единицах эпсилона.
Table 6.64. Error rates for ellint_2
|
Microsoft Visual C++ версии 12.0 Win32 двойной
|
GNU C++ версия 5.1.0 linux длинный двойной
|
GNU C++ версия 5.1.0 linux двойной
|
Солнечная компиляторная версия 0x5130 Sun Solaris длинный двойной
|
Elliptic Integral E: Mathworld Data |
Max = 1,31ε (Mean = 0,727ε) |
Max = 0,656ε (Mean = 0,317ε) (: Max = +INFε (Mean = +INFε) И другие неудачи. |
Max = 0ε (Mean = 0ε) (GSL 1.16: Max = 0.63ε (Mean = 0.325ε) (Cephes: Max = +INF&949; (Mean = = + = = = = = = > < < > < < > < < < < > > > > > |
Max = 0,656ε (Mean = 0,317ε) |
Elliptic Integral E: Случайные данные |
Max = 2,23ε (Mean = 0,639ε) |
Max = 2.05ε (Mean = 0.632ε) (: Max = 3.08e+04ε (Mean = 3.84e+03ε) |
Max = 0ε (Mean = 0ε) (GSL 1.16: Max = 4.4ε (Mean = 1.16ε) (Cephes: Max = 8.92ε (Mean = 1.48&949)
|
Max = 2,05ε (Mean = 0,632ε) |
Испытания используют смесь спотовых тестовых значений, рассчитанных с использованием онлайн-калькулятора на functions.wolfram.com, и случайных тестовых данных, генерируемых с использованием NTL::RR при 1000-битной точности и этой реализации.
Эти функции реализуются с точки зрения интегралов Карлсона с использованием отношений:

и
