Doxygen Source Code Documentation
cdf_07.c File Reference
#include "cdflib.h"Go to the source code of this file.
Functions | |
| double | bfrac (double *a, double *b, double *x, double *y, double *lambda, double *eps) |
Function Documentation
|
||||||||||||||||||||||||||||
|
Definition at line 2 of file cdf_07.c. References a, bfrac(), brcomp(), c, p, and r. Referenced by bfrac(), and bratio().
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 .. Executable Statements ..
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 CONTINUED FRACTION CALCULATION
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 UPDATE AN, BN, ANP1, AND BNP1
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 RESCALE AN, BN, ANP1, AND BNP1
00056 */
00057 an /= bnp1;
00058 bn /= bnp1;
00059 anp1 = r;
00060 bnp1 = 1.0e0;
00061 goto S10;
00062 S20:
00063 /*
00064 TERMINATION
00065 */
00066 bfrac *= r;
00067 return bfrac;
00068 } /* END */
|