Changeset 2563 for trunk/sources/ALGLIB/igammaf.cs
- Timestamp:
- 12/17/09 17:05:22 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/ALGLIB/igammaf.cs
r2445 r2563 73 73 74 74 igammaepsilon = 0.000000000000001; 75 if( x<=0 | a<=0)75 if( (double)(x)<=(double)(0) | (double)(a)<=(double)(0) ) 76 76 { 77 77 result = 0; 78 78 return result; 79 79 } 80 if( x>1 & x>a)80 if( (double)(x)>(double)(1) & (double)(x)>(double)(a) ) 81 81 { 82 82 result = 1-incompletegammac(a, x); 83 83 return result; 84 84 } 85 ax = a*Math.Log(x)-x-gammaf .lngamma(a, ref tmp);86 if( ax<-709.78271289338399)85 ax = a*Math.Log(x)-x-gammafunc.lngamma(a, ref tmp); 86 if( (double)(ax)<(double)(-709.78271289338399) ) 87 87 { 88 88 result = 0; … … 99 99 ans = ans+c; 100 100 } 101 while( c/ans>igammaepsilon);101 while( (double)(c/ans)>(double)(igammaepsilon) ); 102 102 result = ans*ax/a; 103 103 return result; … … 164 164 igammabignumber = 4503599627370496.0; 165 165 igammabignumberinv = 2.22044604925031308085*0.0000000000000001; 166 if( x<=0 | a<=0)166 if( (double)(x)<=(double)(0) | (double)(a)<=(double)(0) ) 167 167 { 168 168 result = 1; 169 169 return result; 170 170 } 171 if( x<1 | x<a)171 if( (double)(x)<(double)(1) | (double)(x)<(double)(a) ) 172 172 { 173 173 result = 1-incompletegamma(a, x); 174 174 return result; 175 175 } 176 ax = a*Math.Log(x)-x-gammaf .lngamma(a, ref tmp);177 if( ax<-709.78271289338399)176 ax = a*Math.Log(x)-x-gammafunc.lngamma(a, ref tmp); 177 if( (double)(ax)<(double)(-709.78271289338399) ) 178 178 { 179 179 result = 0; … … 197 197 pk = pkm1*z-pkm2*yc; 198 198 qk = qkm1*z-qkm2*yc; 199 if( qk!=0)199 if( (double)(qk)!=(double)(0) ) 200 200 { 201 201 r = pk/qk; … … 211 211 qkm2 = qkm1; 212 212 qkm1 = qk; 213 if( Math.Abs(pk)>igammabignumber)213 if( (double)(Math.Abs(pk))>(double)(igammabignumber) ) 214 214 { 215 215 pkm2 = pkm2*igammabignumberinv; … … 219 219 } 220 220 } 221 while( t>igammaepsilon);221 while( (double)(t)>(double)(igammaepsilon) ); 222 222 result = ans*ax; 223 223 return result; … … 290 290 y = 1-d-normaldistr.invnormaldistribution(y0)*Math.Sqrt(d); 291 291 x = a*y*y*y; 292 lgm = gammaf .lngamma(a, ref tmp);292 lgm = gammafunc.lngamma(a, ref tmp); 293 293 i = 0; 294 294 while( i<10 ) 295 295 { 296 if( x>x0 | x<x1)296 if( (double)(x)>(double)(x0) | (double)(x)<(double)(x1) ) 297 297 { 298 298 d = 0.0625; … … 300 300 } 301 301 y = incompletegammac(a, x); 302 if( y<yl | y>yh)302 if( (double)(y)<(double)(yl) | (double)(y)>(double)(yh) ) 303 303 { 304 304 d = 0.0625; 305 305 break; 306 306 } 307 if( y<y0)307 if( (double)(y)<(double)(y0) ) 308 308 { 309 309 x0 = x; … … 316 316 } 317 317 d = (a-1)*Math.Log(x)-x-lgm; 318 if( d<-709.78271289338399)318 if( (double)(d)<(double)(-709.78271289338399) ) 319 319 { 320 320 d = 0.0625; … … 323 323 d = -Math.Exp(d); 324 324 d = (y-y0)/d; 325 if( Math.Abs(d/x)<igammaepsilon)325 if( (double)(Math.Abs(d/x))<(double)(igammaepsilon) ) 326 326 { 327 327 result = x; … … 331 331 i = i+1; 332 332 } 333 if( x0==iinvgammabignumber)334 { 335 if( x<=0)333 if( (double)(x0)==(double)(iinvgammabignumber) ) 334 { 335 if( (double)(x)<=(double)(0) ) 336 336 { 337 337 x = 1; 338 338 } 339 while( x0==iinvgammabignumber)339 while( (double)(x0)==(double)(iinvgammabignumber) ) 340 340 { 341 341 x = (1+d)*x; 342 342 y = incompletegammac(a, x); 343 if( y<y0)343 if( (double)(y)<(double)(y0) ) 344 344 { 345 345 x0 = x; … … 358 358 y = incompletegammac(a, x); 359 359 lgm = (x0-x1)/(x1+x0); 360 if( Math.Abs(lgm)<dithresh)360 if( (double)(Math.Abs(lgm))<(double)(dithresh) ) 361 361 { 362 362 break; 363 363 } 364 364 lgm = (y-y0)/y0; 365 if( Math.Abs(lgm)<dithresh)366 { 367 break; 368 } 369 if( x<=0.0)370 { 371 break; 372 } 373 if( y>=y0)365 if( (double)(Math.Abs(lgm))<(double)(dithresh) ) 366 { 367 break; 368 } 369 if( (double)(x)<=(double)(0.0) ) 370 { 371 break; 372 } 373 if( (double)(y)>=(double)(y0) ) 374 374 { 375 375 x1 = x;
Note: See TracChangeset
for help on using the changeset viewer.