Changeset 3001
- Timestamp:
- Jan 14, 2005, 1:34:46 PM (22 years ago)
- Location:
- trunk/psLib/src
- Files:
-
- 2 edited
-
dataManip/psRandom.c (modified) (3 diffs)
-
math/psRandom.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/dataManip/psRandom.c
r2996 r3001 10 10 * @author GLG, MHPCC 11 11 * 12 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $13 * @date $Date: 2005-01-14 2 1:22:55$12 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-01-14 23:34:46 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 20 20 #include <float.h> 21 21 #include <math.h> 22 #include <time.h> 22 23 #include <gsl/gsl_rng.h> 23 24 #include <gsl/gsl_randist.h> … … 32 33 #include "psDataManipErrors.h" 33 34 34 /* 35 typedef enum { 36 PS_RANDOM_TAUS 37 } psRandomType; 38 39 typedef struct { 40 psRandomType type; 41 gsl_rng *gsl; 42 } psRandom; 43 */ 35 psU64 p_psRandomGetSystemSeed() 36 { 37 FILE* fd; 38 psU64 seedVal = 0; 39 time_t timeVal; 44 40 41 fd = fopen("/dev/urandom","r"); 42 if(fd == NULL) { 43 // Read system clock to get seed 44 seedVal = (psU64)time(&timeVal); 45 } else { 46 // Read urandom to get seed 47 fread(&seedVal, sizeof(psU64),1,fd); 48 // Close file 49 fclose(fd); 50 } 51 52 return seedVal; 53 } 45 54 46 55 psRandom *psRandomAlloc(psRandomType type, 47 56 psU64 seed) 48 57 { 49 gsl_rng *r= NULL;50 psRandom *myRNG = (psRandom *) psAlloc(sizeof(psRandom));58 gsl_rng *r = NULL; 59 psRandom *myRNG = NULL; 51 60 52 61 switch (type) { 53 62 case PS_RANDOM_TAUS: 63 myRNG = (psRandom*)psAlloc(sizeof(psRandom)); 54 64 r = gsl_rng_alloc(gsl_rng_taus); 55 65 myRNG->gsl = r; 56 return(myRNG); 66 if(seed == 0) { 67 gsl_rng_set(myRNG->gsl,p_psRandomGetSystemSeed()); 68 } 69 break; 57 70 58 71 default: 59 psFree(myRNG);60 72 psError(PS_ERR_UNEXPECTED_NULL, 61 73 true, 62 74 PS_ERRORTEXT_psRandom_UNKNOWN_RANDFOM_NUMBER_GENERATOR_TYPE); 75 break; 63 76 } 64 return( NULL);77 return(myRNG); 65 78 } 66 79 -
trunk/psLib/src/math/psRandom.c
r2996 r3001 10 10 * @author GLG, MHPCC 11 11 * 12 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $13 * @date $Date: 2005-01-14 2 1:22:55$12 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-01-14 23:34:46 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 20 20 #include <float.h> 21 21 #include <math.h> 22 #include <time.h> 22 23 #include <gsl/gsl_rng.h> 23 24 #include <gsl/gsl_randist.h> … … 32 33 #include "psDataManipErrors.h" 33 34 34 /* 35 typedef enum { 36 PS_RANDOM_TAUS 37 } psRandomType; 38 39 typedef struct { 40 psRandomType type; 41 gsl_rng *gsl; 42 } psRandom; 43 */ 35 psU64 p_psRandomGetSystemSeed() 36 { 37 FILE* fd; 38 psU64 seedVal = 0; 39 time_t timeVal; 44 40 41 fd = fopen("/dev/urandom","r"); 42 if(fd == NULL) { 43 // Read system clock to get seed 44 seedVal = (psU64)time(&timeVal); 45 } else { 46 // Read urandom to get seed 47 fread(&seedVal, sizeof(psU64),1,fd); 48 // Close file 49 fclose(fd); 50 } 51 52 return seedVal; 53 } 45 54 46 55 psRandom *psRandomAlloc(psRandomType type, 47 56 psU64 seed) 48 57 { 49 gsl_rng *r= NULL;50 psRandom *myRNG = (psRandom *) psAlloc(sizeof(psRandom));58 gsl_rng *r = NULL; 59 psRandom *myRNG = NULL; 51 60 52 61 switch (type) { 53 62 case PS_RANDOM_TAUS: 63 myRNG = (psRandom*)psAlloc(sizeof(psRandom)); 54 64 r = gsl_rng_alloc(gsl_rng_taus); 55 65 myRNG->gsl = r; 56 return(myRNG); 66 if(seed == 0) { 67 gsl_rng_set(myRNG->gsl,p_psRandomGetSystemSeed()); 68 } 69 break; 57 70 58 71 default: 59 psFree(myRNG);60 72 psError(PS_ERR_UNEXPECTED_NULL, 61 73 true, 62 74 PS_ERRORTEXT_psRandom_UNKNOWN_RANDFOM_NUMBER_GENERATOR_TYPE); 75 break; 63 76 } 64 return( NULL);77 return(myRNG); 65 78 } 66 79
Note:
See TracChangeset
for help on using the changeset viewer.
