7 static float srtopi = 2.0 / sqrt( 2.0 *
M_PI );
8 static float upl = 100.0;
11 if ( ndof <= 0 )
return prob;
12 if ( chisq < 0.0 )
return prob;
16 if ( chisq > upl )
return prob;
17 float sum =
exp( -0.5 * chisq );
23 if ( m == 1 )
return sum;
24 for (
int i = 2; i <= m; i++ )
26 term = 0.5 * term * chisq / ( i - 1 );
35 float srty = sqrt( chisq );
36 float temp = srty / M_SQRT2;
38 if ( ndof == 1 )
return prob;
39 if ( ndof == 3 )
return ( srtopi * srty * sum + prob );
41 for (
int i = 1; i <= m; i++ )
43 term = term * chisq / ( 2 * i + 1 );
46 return ( srtopi * srty * sum + prob );
53 float srty = sqrt( chisq ) - sqrt( ndof - 0.5 );
54 if ( srty < 12.0 ) prob = 0.5 * erfc( srty );