random.c

Go to the documentation of this file.
00001 #include <assert.h>
00002 #include <math.h>
00003 #include <stdio.h>
00004 #include <stdlib.h>
00005 #include <time.h>
00006 #include "random.h"
00007 
00008 void set_seed (unsigned int seed)
00009 {
00010     if (seed == 0 || seed > RAND_MAX) {
00011         /* use time() to set the seed */
00012         time_t t = time(NULL);
00013         assert(t > 0);
00014         seed = t;
00015     }
00016     fprintf(stderr, "random seed = %u\n", seed);
00017     srand(seed);
00018 }
00019 
00020 REAL randn () {
00021     static int saved = 0;
00022     static REAL saved_val;
00023     REAL rsq, v1, v2, ratio;
00024 
00025     if (saved) {
00026         saved = 0;
00027         return saved_val;
00028     }
00029 
00030     do {
00031         v1 = 2*randu()-1;
00032         v2 = 2*randu()-1;
00033         rsq = v1*v1 + v2*v2;
00034     } while (rsq >= 1 || rsq == 0);
00035     ratio = sqrt(-2 * log(rsq)/rsq);
00036 
00037     saved_val = v1 * ratio;
00038     saved = 1;
00039     return v2 * ratio;
00040 }

Generated on Mon Jan 9 23:43:24 2006 for LEMGA by  doxygen 1.4.6