Math-Cephes
view release on metacpan or search on metacpan
libmd/incbi.c view on Meta::CPAN
/* incbi()
*
* Inverse of imcomplete beta integral
*
*
*
* SYNOPSIS:
*
* double a, b, x, y, incbi();
*
* x = incbi( a, b, y );
*
*
*
* DESCRIPTION:
*
* Given y, the function finds x such that
*
* incbet( a, b, x ) = y .
*
* The routine performs interval halving or Newton iterations to find the
* root of incbet(a,b,x) - y = 0.
*
*
* ACCURACY:
*
* Relative error:
* x a,b
* arithmetic domain domain # trials peak rms
* IEEE 0,1 .5,10000 50000 5.8e-12 1.3e-13
* IEEE 0,1 .25,100 100000 1.8e-13 3.9e-15
* IEEE 0,1 0,5 50000 1.1e-12 5.5e-15
* VAX 0,1 .5,100 25000 3.5e-14 1.1e-15
* With a and b constrained to half-integer or integer values:
* IEEE 0,1 .5,10000 50000 5.8e-12 1.1e-13
* IEEE 0,1 .5,100 100000 1.7e-14 7.9e-16
* With a = .5, b constrained to half-integer or integer values:
* IEEE 0,1 .5,10000 10000 8.3e-11 1.0e-11
*/
/*
Cephes Math Library Release 2.8: June, 2000
Copyright 1984, 1996, 2000 by Stephen L. Moshier
*/
#include "mconf.h"
extern double MACHEP, MAXNUM, MAXLOG, MINLOG;
#ifdef ANSIPROT
extern double ndtri ( double );
extern double md_exp ( double );
extern double md_fabs ( double );
extern double md_log ( double );
extern double sqrt ( double );
extern double lgam ( double );
extern double incbet ( double, double, double );
#else
double ndtri(), md_exp(), md_fabs(), md_log(), sqrt(), lgam(), incbet();
#endif
double incbi( aa, bb, yy0 )
double aa, bb, yy0;
{
double a, b, md_y0, d, y, x, x0, x1, lgm, yp, di, dithresh, yl, yh, xt;
int i, rflg, dir, nflg;
i = 0;
if( yy0 <= 0 )
return(0.0);
if( yy0 >= 1.0 )
return(1.0);
x0 = 0.0;
yl = 0.0;
x1 = 1.0;
yh = 1.0;
nflg = 0;
if( aa <= 1.0 || bb <= 1.0 )
{
( run in 0.902 second using v1.01-cache-2.11-cpan-71847e10f99 )