import java.io.*; /* wegen printlog */ class RandomGaussian{ private long lNoise; private long longInteger; private long longintval = 0; private double result; private long l1 = 0 ; private long[] l2 = new long[2836] ; private double fwurzel,betrag2; private double wert1,wert2; private double zufall01a; private double zufall01b; // PrintWriter printlog = new PrintWriter(System.out, true); void RandomGaussian(){ lNoise = -11; } void RandomGaussian(long lNoise_in){ lNoise = lNoise_in; } void RandomGaussianInit(long lNoise_in){ lNoise = lNoise_in; } double NextRandomGaussian() { if (longintval == 0) { do { // printlog.println(" R0a " + lNoise ); zufall01a = Random01() ; // printlog.println(" R0b " + lNoise ); zufall01b = Random01() ; wert1 = 2.0*zufall01a - 1.0; wert2 = 2.0*zufall01b - 1.0; betrag2=wert1*wert1+wert2*wert2; } while (betrag2 >= 1.0 || betrag2 == 0.0); fwurzel=Math.sqrt(-2.0*Math.log(betrag2)/betrag2); result=wert1*fwurzel; longintval=1; return wert2*fwurzel; } else { longintval=0; return result; }; } /* Gleichverteilte Zufallszahlen zwischen 0 und 1: *****/ double Random01() { int lauf, lauf2; double result; if ( lNoise <= 0 || l1 == 0 ) { if ( ((-1)*(lNoise)) < 1 ) { lNoise = 1; } else { lNoise = (-1)*(lNoise); }; for( lauf = 2836+7 ; lauf >= 0 ; lauf-- ) { lauf2 = (int) (lNoise)/127773; lNoise = 16807*(lNoise-lauf2*127773) - 2836*lauf2; if( lNoise < 0 ) { lNoise += 2147483647; }; if( lauf < 2836 ) { l2[ lauf ] = lNoise; }; }; l1=l2[0]; }; lauf2 = (int) (lNoise)/127773; lNoise = 16807 * (lNoise-lauf2*127773) - 2836 * lauf2; if( lNoise < 0 ) { lNoise += 2147483647; }; lauf = (int) l1/(1+(2147483647-1)/2836); l1 = l2[ lauf ]; l2[ lauf ] = lNoise; if ( (result=(1.0/2147483647)*l1) > (1.0 - 1.2e-7) ) { return (1.0 - 1.2e-7); } else { return result; }; } }