E.V.E  0.1-beta

◆ ellint_rd

eve::ellint_rd = {}
inlineconstexpr

Callable object computing the the Carlson's elliptic integral \( \frac32 \int_{0}^{\infty} \scriptstyle[(t+x)(t+y)]^{-1/2} (t+z)^{-3/2}\scriptstyle\;\mathrm{d}t\).

Required header: #include <eve/function/ellint_rd.hpp>

Members Functions

Member Effect
operator() the ellint_rd operation
operator[] Construct a conditional version of current function object

auto operator()( floating_real_value auto x
, floating_real_value auto z) const noexcept;
Definition: value.hpp:103

Parameters

x, y, z: floating real values.

This computes the Carlson's elliptic integral

\[ R_D(x, y, z) = \frac32 \int_{0}^{\infty} [(t+x)(t+y)]^{-1/2} (t+z)^{-3/2} \mbox{d}t\]

as described in Carlson, Numerische Mathematik, vol 33, 1 (1979)

Parameters x and ymust be non-negative and at most one ot them zero. Parameter z must be greater than 0. In any other case the result is nan.

Return value

Returns elementwise the Carlson's integral.

The result type is of the compatibility type of the three parameters.


auto operator[]( conditional_expression auto cond ) const noexcept;

Higher-order function generating a masked version of eve::ellint_rd

Parameters

cond : conditional expression

Return value

A Callable object so that the expression ellint_rd[cond](x, ...) is equivalent to if_else(cond,ellint_rd(x, ...),x)


Supported decorators

no decorators are supported

Example

See it live on Compiler Explorer

#include <eve/function/ellint_rd.hpp>
#include <eve/wide.hpp>
#include <iostream>
int main()
{
wide_ft pf = {1.0f, 0.0f, 1.5f, 3.0f};
wide_ft qf = {1.0f, 4.0f, 0.2f, 0.5f};
wide_ft rd = {2.0f, 1.0f, 0.1f, 0.4f};
std::cout << "---- simd" << '\n'
<< "<- pf = " << pf << '\n'
<< "<- qf = " << qf << '\n'
<< "<- rd = " << rd << '\n'
<< "-> ellint_rd(pf, qf, rd) = " << eve::ellint_rd(pf, qf, rd) << '\n';
float xf = 3.0f;
float yf = 0.5f;
float zf = 1.0f;
std::cout << "---- scalar" << '\n'
<< "<- xf = " << xf << '\n'
<< "<- yf = " << yf << '\n'
<< "<- zf = " << zf << '\n'
<< "-> ellint_rd(xf, yf, zf) = " << eve::ellint_rd(xf, yf, zf) << '\n';
return 0;
}
constexpr callable_ellint_rd_ ellint_rd
Callable object computing the the Carlson's elliptic integral .
Definition: ellint_rd.hpp:87
Wrapper for SIMD registers.
Definition: wide.hpp:65