#include <boost/math/special_functions/ellint_rf.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
}} 
#include <boost/math/special_functions/ellint_rd.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
}} 
#include <boost/math/special_functions/ellint_rj.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3, class T4>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
template <class T1, class T2, class T3, class T4, class Policy>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
}} 
#include <boost/math/special_functions/ellint_rc.hpp>
namespace boost { namespace math {
template <class T1, class T2>
calculated-result-type ellint_rc(T1 x, T2 y)
template <class T1, class T2, class Policy>
calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
}} 
#include <boost/math/special_functions/ellint_rg.hpp>
namespace boost { namespace math {
template <class T1, class T2, class T3>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
}} 
Эти функции возвращают симметричные эллиптические интегралы Карлсона, функции имеют сложное поведение во всех своих возможных областях, но следующий график дает представление об их поведении:

Тип возврата этих функций вычисляется с использованием правил расчета типа результата., когда аргументы бывают разных типов: в противном случае возврат является тем же типом, что и аргументы.
template <class T1, class T2, class T3>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rf(T1 x, T2 y, T3 z, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы все аргументы были неотрицательными, а максимум один может быть нулевым. В противном случае возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
template <class T1, class T2, class T3>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rd(T1 x, T2 y, T3 z, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы x и y были неотрицательными, причем самое большее один из них равен нулю, и что z>=0.В противном случае возвращается результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
template <class T1, class T2, class T3, class T4>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p)
template <class T1, class T2, class T3, class T4, class Policy>
calculated-result-type ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы x, y и z были неотрицательными, причем максимум один из них равен нулю, и чтоp! = 0. В противном случае возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Когдаp< 0функция возвращаетОсновное значение Кошис использованием отношения:

template <class T1, class T2>
calculated-result-type ellint_rc(T1 x, T2 y)
template <class T1, class T2, class Policy>
calculated-result-type ellint_rc(T1 x, T2 y, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

x >0и чтоу! = 0. В противном случае возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Когдаy< 0функция возвращаетОсновное значение Кошис использованием отношения:

template <class T1, class T2, class T3>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z)
template <class T1, class T2, class T3, class Policy>
calculated-result-type ellint_rg(T1 x, T2 y, T3 z, const Policy&)
Возвращает эллиптический интеграл Карлсона RF:

Требует, чтобы x и y были неотрицательными, иначе возвращает результатdomain_error.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Существует два набора тестов.
Спот-тесты сравнивают выбранные значения с тестовыми данными, приведенными в:
Случайные тестовые данные, генерируемые с использованием NTL::RR с 1000-битной точностью, и наши проверки реализации ошибок округления и / или регрессий.
Существуют также проверки здравомыслия, которые используют взаимосвязи между интегралами для проверки их правильности: см. вышеупомянутую статью Карлсона для деталей.
Эти функции вычисляются с использованием только базовых арифметических операций, поэтому нет большого различия в точности по сравнению с различными платформами. Обратите внимание, что только результаты для самого широкого типа с плавающей запятой в системе приведены, поскольку более узкие типы имеютфактически нулевую ошибку. Все значения являются относительными погрешностями в единицах эпсилона.
Table 6.58. Error rates for ellint_rc
| 
               | 
                 Microsoft Visual C++ версия 12.0 Win32
  
               | 
                 GNU C++ версия 5.1.0 Linux Double 
               | 
                 GNU C++ версия 5.1.0 Linux длинный двойной 
               | 
                 Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной 
               | 
RC: Случайные данные  | 
Макс = 0,962ε (Средний = 0,407ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 2.4ε (Mean = 0.624ε)]  | 
Макс = 0.995ε (Средний = 0.433ε)  | 
Макс = 0.995ε (Средний = 0.438ε)  | 
 
 
Table 6.59. Error rates for ellint_rd
| 
               | 
                 Microsoft Visual C++ версия 12.0 Win32
  
               | 
                 GNU C++ версия 5.1.0 Linux Double 
               | 
                 GNU C++ версия 5.1.0 Linux длинный двойной 
               | 
                 Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной 
               | 
РД: Случайные данные  | 
Макс = 2.16ε (Средний = 0.803ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 2,59ε (Mean = 0.878ε)]  | 
Макс = 2.73ε (Средний = 0.831ε)  | 
Макс = 2,73ε (Средний = 0,829ε)  | 
РД: y = z  | 
Макс = 16,5ε (Средний = 0,843ε)  | 
Макс = 0.896ε (Средний = 0,022ε)
  GSL 1.16:Макс = 2.88ε (Средний = 0.839ε)]  | 
Макс = 2,65ε (Средний = 0,82ε)  | 
Макс = 2,65ε (Средний = 0,819ε)  | 
РД: x = y  | 
Макс = 3.51ε (Средний = 0.816ε)  | 
Макс = 0,824ε (Средний = 0,0272ε)
  GSL 1.16:Макс = 3,74ε (Средний = 0,84ε)  | 
Макс = 2.85ε (Средний = 0.865ε)  | 
Макс = 2.85ε (Средний = 0.865ε)  | 
РД: x = 0, y = z  | 
Макс = 1,16ε (Средний = 0,493ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 2ε (Mean = 0.656ε)]  | 
Макс = 1,19ε (Средний = 0,522ε)  | 
Макс = 1,19ε (Средний = 0,522ε)  | 
РД: x = y = z  | 
Макс = 1,03ε (Средний = 0,418ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 1,03ε (Mean = 0,418ε)]  | 
Макс = 0.998ε (Средний = 0.387ε)  | 
Макс = 0.998ε (Средний = 0.387ε)  | 
РД: x = 0  | 
Макс = 2.64ε (Средний = 0.894ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 2.85ε (Mean = 0.781ε)]  | 
Макс = 2.79ε (Средний = 0.883ε)  | 
Макс = 2.79ε (Средний = 0.883ε)  | 
 
 
Table 6.60. Error rates for ellint_rg
| 
               | 
                 Microsoft Visual C++ версия 12.0 Win32
  
               | 
                 GNU C++ версия 5.1.0 Linux Double 
               | 
                 GNU C++ версия 5.1.0 Linux длинный двойной 
               | 
                 Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной 
               | 
RG: Случайные данные  | 
Макс = 3.65ε (Средний = 0.929ε)  | 
Макс = 0,983ε (Средний = 0,0172ε) GSL 1.16:Макс = 0,983ε (Средний = 0,0172ε)  | 
Макс = 3.95ε (Средний = 0.951ε)  | 
Макс = 3.95ε (Средний = 0.951ε)  | 
RG: два значения 0  | 
Макс = 0ε (Средний = 0ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 0ε (Mean = 0ε)]  | 
Макс = 0ε (Средний = 0ε)  | 
Макс = 0ε (Средний = 0ε)  | 
RG: все значения одинаковы или равны нулю  | 
Макс = 1,06ε (Средний = 0,348ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 0ε (Mean = 0ε)]  | 
Макс = 0.992ε (Средний = 0.288ε)  | 
Макс = 0.992ε (Средний = 0.288ε)  | 
RG: два одинаковых значения  | 
Макс = 1,96ε (Средний = 0,374ε)  | 
Макс = 0,594ε (Средний = 0,0103ε)
  GSL 1.16:Макс = 0,594ε (Средний = 0,0103ε)  | 
Макс = 1.51ε (Средний = 0.404ε)  | 
Макс = 1.51ε (Средний = 0.404ε)  | 
RG: одно значение ноль  | 
Макс = 1,96ε (Средний = 0,674ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 0ε (Mean = 0ε)]  | 
Макс = 2.14ε (Средний = 0.722ε)  | 
Макс = 2.14ε (Средний = 0.722ε)  | 
 
 
Table 6.61. Error rates for ellint_rf
| 
               | 
                 Microsoft Visual C++ версия 12.0 Win32
  
               | 
                 GNU C++ версия 5.1.0 Linux Double 
               | 
                 GNU C++ версия 5.1.0 Linux длинный двойной 
               | 
                 Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной 
               | 
RF: Случайные данные  | 
Макс = 2.02ε (Средний = 0.677ε)  | 
Макс = 0ε (Средний = 0ε) GSL 1.16:Макс = 2.73ε (Средний = 0.804ε)]  | 
Макс = 2.54ε (Средний = 0.674ε)  | 
Макс = 2.54ε (Средний = 0.674ε)  | 
RF: x = y = z  | 
Макс = 0,999ε (Средний = 0,335ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 0.999ε (Mean = 0.34ε)]  | 
Макс = 0.991ε (Средний = 0.345ε)  | 
Макс = 0.991ε (Средний = 0.345ε)  | 
RF: x = y или y = z или x = z  | 
Макс = 1.21ε (Средний = 0.394ε)  | 
Макс = 0,536ε (Средний = 0,00658ε)
  GSL 1.16:Макс = 2,89ε (Средний = 0,749ε)]  | 
Макс = 1,95ε (Средний = 0,418ε)  | 
Макс = 1,57ε (Средний = 0,418ε)  | 
RF: x = 0, y = z  | 
Макс = 0,999ε (Средний = 0,407ε)  | 
Max = 0ε (Mean = 0ε)
  GSL 1.16:Max = 1.29ε (Mean = 0,527ε)]  | 
Макс = 0.894ε (Средний = 0.338ε)  | 
Макс = 0.894ε (Средний = 0.338ε)  | 
RF: z = 0  | 
Макс = 1,89ε (Средний = 0,587ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 2,54ε (Mean = 0.781ε)]  | 
Макс = 1,7ε (Средний = 0,539ε)  | 
Макс = 1,7ε (Средний = 0,539ε)  | 
 
 
Table 6.62. Error rates for ellint_rj
| 
               | 
                 Microsoft Visual C++ версия 12.0 Win32
  
               | 
                 GNU C++ версия 5.1.0 Linux Double 
               | 
                 GNU C++ версия 5.1.0 Linux длинный двойной 
               | 
                 Компилятор Sun версии 0x5130 Солнечный солярис длинный двойной 
               | 
RJ: Случайные данные  | 
Макс = 119ε (Средний = 4.32ε)  | 
Max = 0.52ε (Mean = 0,0184ε)
  GSL 1.16:Max = 3.57ε (Mean = 0.704ε)И другие сбои.  | 
Макс = 186ε (Средний = 6,67ε)  | 
Макс = 186ε (Средний = 6,7ε)  | 
RJ: 4 равных значения  | 
Макс = 1,03ε (Средний = 0,418ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 1,03ε (Mean = 0,418ε)]  | 
Макс = 0.998ε (Средний = 0.387ε)  | 
Макс = 0.998ε (Средний = 0.387ε)  | 
RJ: 3 равных значения  | 
Макс = 39,9ε (Средний = 1,12ε)  | 
Макс = 0ε (Mean = 0ε)
  GSL 1.16:Макс = 3.96ε (Mean = 1,06ε)]  | 
Макс = 20.8ε (Средний = 0.986ε)  | 
Макс = 18.2ε (Средний = 0.917ε)  | 
RJ: 2 равных значения  | 
Макс = 214ε (Средний = 5.05ε)  | 
Макс = 0,6ε (Средний = 0,0228ε)
  GSL 1.16:Макс = 2,57ε (Средний = 0,754ε)]  | 
Макс = 220ε (Средний = 6.64ε)  | 
Макс = 135ε (Средний = 5.3ε)  | 
RJ: Равные z и p  | 
Макс = 15,4ε (Средний = 1,05ε)  | 
Max = 0,742ε (Mean = 0,0166ε)
  GSL 1.16:Max = 2,62ε (Mean = 0,699ε)]  | 
Макс = 17.2ε (Средний = 1,16ε)  | 
Макс = 16,6ε (Средний = 1,15ε)  | 
 
 
Ключом алгоритма КарлсонаCarlson79является теорема дублирования:

Применяя его многократно,x,у,zстановятся все ближе и ближе. Когда они почти равны, уравнение особого случая

используется. Более конкретно,[R F]оценивается от расширения серии Тейлора до пятого порядка. Вычисления трех других интегралов аналогичны, за исключением RC, которые могут быть вычислены из элементарных функций.
Дляp< 0вRJ(x, y, z, p)иy< 0вRC(x, y)интегралы единичны и ихОсновные ценности Кошивозвращаются через отношения:

