#include "genlib.h" #include "log.h" #include #define NTAB 32 double gasdev(long* idum, long* idum2, long* iy, long iv[NTAB]) { /*returns a normally distributed deviate with 0 mean*/ /*and unit variance, using ran2(idum) as the source */ /*of uniform deviates */ log_info("RESULT = in progress, idum = %f, idum2 = %f, iy = %f", *idum, *idum2, *iy); double ran2(long* idum, long* idum2, long* iy, long iv[NTAB]); static int iset = 0; static double gset; double fac, rsq, v1, v2; if (iset == 0) { do { v1 = 2.0 * ran2(idum, idum2, iy, iv) - 1.0; v2 = 2.0 * ran2(idum, idum2, iy, iv) - 1.0; rsq = v1 * v1 + v2 * v2; } while (rsq >= 1.0 || rsq == 0.0); fac = sqrt(-2.0 * log(rsq) / rsq); gset = v1 * fac; iset = 1; log_info("RESULT = success, gset = %f, fac = %f, v1 = %f", gset, fac, v1); return (v2 * fac); } else { iset = 0; log_info("RESULT = success, gset = %f", gset); return gset; } }