[section:beta_function Beta]

[h4 Synopsis]

``
#include <boost/math/special_functions/beta.hpp>
``

   namespace boost{ namespace math{
   
   template <class T1, class T2>
   ``__sf_result`` beta(T1 a, T2 b);
   
   template <class T1, class T2, class ``__Policy``>
   ``__sf_result`` beta(T1 a, T2 b, const ``__Policy``&);
   
   }} // namespaces

[h4 Description]

The beta function is defined by:

[equation beta1]

[graph beta]

[optional_policy]

There are effectively two versions of this function internally: a fully
generic version that is slow, but reasonably accurate, and a much more
efficient approximation that is used where the number of digits in the significand
of T correspond to a certain __lanczos.  In practice any built-in
floating-point type you will encounter has an appropriate __lanczos
defined for it.  It is also possible, given enough machine time, to generate
further __lanczos's using the program libs/math/tools/lanczos_generator.cpp.

The return type of these functions is computed using the __arg_pomotion_rules
when T1 and T2 are different types.

[h4 Accuracy]

The following table shows peak errors for various domains of input arguments,
along with comparisons to the __gsl and __cephes libraries.  Note that
only results for the widest floating point type on the system are given as
narrower types have __zero_error.

[table Peak Errors In the Beta Function
[[Significand Size] [Platform and Compiler] [Errors in range

0.4 < a,b < 100]  [Errors in range

1e-6 < a,b < 36]]
[[53] [Win32, Visual C++ 8] [Peak=99 Mean=22

(GSL Peak=1178 Mean=238)

(__cephes=1612)]  [Peak=10.7 Mean=2.6

(GSL Peak=12 Mean=2.0)

(__cephes=174)]]
[[64] [Red Hat Linux IA32, g++ 3.4.4] [Peak=112.1 Mean=26.9]  [Peak=15.8 Mean=3.6]]
[[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=61.4 Mean=19.5]  [Peak=12.2 Mean=3.6]]
[[113] [HPUX IA64, aCC A.06.06] [Peak=42.03 Mean=13.94]  [Peak=9.8 Mean=3.1]]
]

Note that the worst errors occur when a or b are large, and that 
when this is the case the result is very close to zero, so absolute
errors will be very small.

[h4 Testing]

A mixture of spot tests of exact values, and randomly generated test data are
used: the test data was computed using
[@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision.

[h4 Implementation]

Traditional methods of evaluating the beta function either involve evaluating
the gamma functions directly, or taking logarithms and then 
exponentiating the result.  However, the former is prone to overflows
for even very modest arguments, while the latter is prone to cancellation
errors.  As an alternative, if we regard the gamma function as a white-box
containing the __lanczos, then we can combine the power terms:

[equation beta2]

which is almost the ideal solution, however almost all of the error occurs
in evaluating the power terms when /a/ or /b/ are large.  If we assume that /a > b/
then the larger of the two power terms can be reduced by a factor of /b/, which
immediately cuts the maximum error in half:

[equation beta3]

This may not be the final solution, but it is very competitive compared to
other implementation methods.

The generic implementation - where no __lanczos approximation is available - is
implemented in a very similar way to the generic version of the gamma function.
Again in order to avoid numerical overflow the power terms that prefix the series and
continued fraction parts are collected together into:

[equation beta8]

where la, lb and lc are the integration limits used for a, b, and a+b.

There are a few special cases worth mentioning:

When /a/ or /b/ are less than one, we can use the recurrence relations:

[equation beta4]

[equation beta5]

to move to a more favorable region where they are both greater than 1.

In addition:

[equation beta7]

[endsect][/section:beta_function The Beta Function]
[/ 
  Copyright 2006 John Maddock and Paul A. Bristow.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]

