/* Returns a sample from Gamma(a, 1). */ double GammaRand(double a) { /* Algorithm: * G. Marsaglia and W.W. Tsang, A simple method for generating gamma * variables, ACM Transactions on Mathematical Software, Vol. 26, No. 3, * Pages 363-372, September, 2000. * http://portal.acm.org/citation.cfm?id=358414 */ double boost, d, c, v; if(a < 1) { /* boost using Marsaglia's (1961) method: gam(a) = gam(a+1)*U^(1/a) */ boost = exp(log(Rand())/a); a++; } else boost = 1; d = a-1.0/3; c = 1.0/sqrt(9*d); while(1) { double x,u; do { x = RandN(); v = 1+c*x; } while(v <= 0); v = v*v*v; x = x*x; u = Rand(); if((u < 1-.0331*x*x) || (log(u) < 0.5*x + d*(1-v+log(v)))) break; } return( boost*d*v ); }
void CreateDamageExplosion (int h, int i) { if (EGI_FLAG (bDamageExplosions, 1, 0, 0) && (gameStates.app.nSDLTicks - gameData.smoke.objExplTime [i] > 100)) { gameData.smoke.objExplTime [i] = gameStates.app.nSDLTicks; if (!RandN (11 - h)) CreateSmallFireballOnObject (OBJECTS + i, F1_0, 1); } }
void CreateDamageExplosion (int h, int i) { if (EGI_FLAG (bDamageExplosions, 1, 0, 0) && (gameStates.app.nSDLTicks - *particleManager.ObjExplTime (i) > 100)) { *particleManager.ObjExplTime (i) = gameStates.app.nSDLTicks; if (!RandN (11 - h)) CreateSmallFireballOnObject (OBJECTS + i, I2X (1), 1); } }
void MATRIX::Mutate(double mutationProbability, double min, double max) { for (int i=0;i<length;i++) for (int j=0;j<width;j++) { // if ( Rand(0,1) < mutationProbability ) { double randN = mutationProbability * (max-min) * RandN(); Add(i,j,randN); if ( Get(i,j)<min ) Set(i,j,min); if ( Get(i,j)>max ) Set(i,j,max); //Set(i,j, Rand(min,max) ); // } } }