E.V.E
v2023.02.15

◆ beta

eve::beta = {}
inlineconstexpr

Computes the beta function: \(\displaystyle \mathbf{B}(x, y) = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)}\) is returned.

Defined in header

#include <eve/module/special.hpp>

Callable Signatures

namespace eve
{
template< eve::floating_ordered_value T, eve::floating_ordered_value U >
auto beta(T x,U y) noexcept; //1
template< eve::floating_value T, eve::floating_value U >
auto beta(eve::as_complex_t<T> x, U y) noexcept; //2
template< eve::floating_value T, eve::floating_value U >
auto beta(T x, eve::as_complex_t<U> y) noexcept; //2
template< eve::floating_value T, eve::floating_value U >
auto beta(eve::as_complex_t<T> x, eve::as_complex_t<U> y) noexcept; //2
}
constexpr callable_beta_ beta
Computes the beta function: is returned.
Definition: beta.hpp:66
Definition: abi.hpp:18

Parameters

  1. x, y: strictly positive real floating argument.
  2. x, y: real floating or complex arguments.

Return value

  1. \(\displaystyle \mathbf{B}(x,y) = \int_0^1 t^{x-1}(1-t)^{y-1}\mbox{d}t\)
  2. The complex \(\displaystyle \mathbb{B}(x,y) = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)}\) is returned.

Example

Real version

#include <eve/module/special.hpp>
#include <eve/wide.hpp>
#include <iostream>
int main()
{
wide_ft pf = { 0.0f, 1.0f, 4.0f, 2.0f };
wide_ft qf = { 1.0f, 1.0f, 3.0f, 5.0f};
std::cout
<< "---- simd" << '\n'
<< "<- pf = " << pf << '\n'
<< "<- qf = " << qf << '\n'
<< "-> beta(pf, qf) = " << eve::beta(pf, qf) << '\n'
;
float xf = 2.0f;
float yf = 10.0f;
std::cout
<< "---- scalar" << '\n'
<< "<- xf = " << xf << '\n'
<< "<- yf = " << yf << '\n'
<< "-> beta(xf, yf) = " << eve::beta(xf, yf) << '\n';
return 0;
}
Wrapper for SIMD registers.
Definition: wide.hpp:65

Complex version

#include <eve/module/complex.hpp>
#include <eve/wide.hpp>
#include <iostream>
int main()
{
wide_ft ref1 = { 0.0f, 1.0f, -1.0f, 0.5f};
wide_ft imf1 = { 2.0f , -1.0, -5.0, 0.0};
auto z1 = eve::as_complex_t<wide_ft>(ref1, imf1);
wide_ft ref2 = { 4.0f, 0.0f, -1.0f, -0.5f};
wide_ft imf2 = { -2.0f , 1.0, 3.0, 10.0};
auto z2 = eve::as_complex_t<wide_ft>(ref2, imf2);
std::cout
<< "---- simd" << std::endl
<< "<- z1 = " << z1 << std::endl
<< "<- z2 = " << z2 << std::endl
<< "-> beta(z1,z2) = " << eve::beta(z1,z2) << std::endl;
return 0;
}