#include #include double gauss_rand(void) { static double V1, V2, S; static int phase = 0; double ret; if ( phase == 0 ) { do { double U1 = (double)rand() / RAND_MAX; double U2 = (double)rand() / RAND_MAX; V1 = 2.0 * U1 - 1.0; V2 = 2.0 * U2 - 1.0; S = V1 * V1 + V2 * V2; } while ( S >=1 || S == 0 ); ret = V1 * sqrt( -2.0 * log(S) / S); } else { ret = V2 * sqrt( -2.0 * log(S) / S); } phase = 1 - phase; return ret; }