Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
cdf_07.c
Go to the documentation of this file.00001 #include "cdflib.h"
00002 double bfrac(double *a,double *b,double *x,double *y,double *lambda,
00003 double *eps)
00004
00005
00006
00007
00008
00009
00010 {
00011 static double bfrac,alpha,an,anp1,beta,bn,bnp1,c,c0,c1,e,n,p,r,r0,s,t,w,yp1;
00012
00013
00014
00015
00016 bfrac = brcomp(a,b,x,y);
00017 if(bfrac == 0.0e0) return bfrac;
00018 c = 1.0e0+*lambda;
00019 c0 = *b/ *a;
00020 c1 = 1.0e0+1.0e0/ *a;
00021 yp1 = *y+1.0e0;
00022 n = 0.0e0;
00023 p = 1.0e0;
00024 s = *a+1.0e0;
00025 an = 0.0e0;
00026 bn = anp1 = 1.0e0;
00027 bnp1 = c/c1;
00028 r = c1/c;
00029 S10:
00030
00031
00032
00033 n += 1.0e0;
00034 t = n/ *a;
00035 w = n*(*b-n)**x;
00036 e = *a/s;
00037 alpha = p*(p+c0)*e*e*(w**x);
00038 e = (1.0e0+t)/(c1+t+t);
00039 beta = n+w/s+e*(c+n*yp1);
00040 p = 1.0e0+t;
00041 s += 2.0e0;
00042
00043
00044
00045 t = alpha*an+beta*anp1;
00046 an = anp1;
00047 anp1 = t;
00048 t = alpha*bn+beta*bnp1;
00049 bn = bnp1;
00050 bnp1 = t;
00051 r0 = r;
00052 r = anp1/bnp1;
00053 if(fabs(r-r0) <= *eps*r) goto S20;
00054
00055
00056
00057 an /= bnp1;
00058 bn /= bnp1;
00059 anp1 = r;
00060 bnp1 = 1.0e0;
00061 goto S10;
00062 S20:
00063
00064
00065
00066 bfrac *= r;
00067 return bfrac;
00068 }