From d2ebf68716ad50afc58d008f562d4f960bb8f126 Mon Sep 17 00:00:00 2001 From: Kiwamu Ishikura Date: Sat, 13 Dec 2014 15:13:58 +0900 Subject: use random() instead of drand48_r drand48_r cannot be used in OS X, and also it uses linear congruential generators. --- packages/base/src/C/vector-aux.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) (limited to 'packages') diff --git a/packages/base/src/C/vector-aux.c b/packages/base/src/C/vector-aux.c index f8feb37..51bff73 100644 --- a/packages/base/src/C/vector-aux.c +++ b/packages/base/src/C/vector-aux.c @@ -700,24 +700,16 @@ int saveMatrix(char * file, char * format, KDMAT(a)){ //////////////////////////////////////////////////////////////////////////////// -inline double urandom(struct drand48_data * buffer) { - double res; - drand48_r(buffer,&res); - return res; -} - - // http://c-faq.com/lib/gaussian.html -double gaussrand(struct drand48_data *buffer, - int *phase, double *pV1, double *pV2, double *pS) +double gaussrand(int *phase, double *pV1, double *pV2, double *pS) { double V1=*pV1, V2=*pV2, S=*pS; double X; if(*phase == 0) { do { - double U1 = urandom(buffer); - double U2 = urandom(buffer); + double U1 = (double)random() / (double)RAND_MAX; + double U2 = (double)random() / (double)RAND_MAX; V1 = 2 * U1 - 1; V2 = 2 * U2 - 1; @@ -732,11 +724,10 @@ double gaussrand(struct drand48_data *buffer, *pV1=V1; *pV2=V2; *pS=S; return X; + } int random_vector(unsigned int seed, int code, DVEC(r)) { - struct drand48_data buffer; - srand48_r(seed,&buffer); int phase = 0; double V1,V2,S; @@ -744,13 +735,13 @@ int random_vector(unsigned int seed, int code, DVEC(r)) { switch (code) { case 0: { // uniform for (k=0; k