Address review comments
This commit is contained in:
@@ -29,33 +29,32 @@
|
|||||||
static unsigned int urseed, iy, ir[98]; /// uniformrandom
|
static unsigned int urseed, iy, ir[98]; /// uniformrandom
|
||||||
static bool tableNordDone = false; /// gaussZiggurat
|
static bool tableNordDone = false; /// gaussZiggurat
|
||||||
|
|
||||||
#define a 1664525lu
|
|
||||||
#define mod 4294967296.0 /* is 2**32 */
|
|
||||||
|
|
||||||
/*!\brief Generate a random number form `/dev/urandom`. */
|
/*!\brief Generate a random number form `/dev/urandom`. */
|
||||||
unsigned long get_random_seed(void)
|
void fill_random(void *buf, size_t sz)
|
||||||
{
|
{
|
||||||
unsigned long seed;
|
|
||||||
const char* fn = "/dev/urandom";
|
const char* fn = "/dev/urandom";
|
||||||
FILE* f = fopen(fn, "rb");
|
FILE* f = fopen(fn, "rb");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
fprintf(stderr, "could not open %s for seed generation: %d %s\n", fn, errno, strerror(errno));
|
fprintf(stderr, "could not open %s for seed generation: %d %s\n", fn, errno, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
int rc = fread(&seed, sizeof(seed), 1, f);
|
int rc = fread(buf, sz, 1, f);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
fprintf(stderr, "could not read %s for seed generation: %d %s\n", fn, errno, strerror(errno));
|
fprintf(stderr, "could not read %s for seed generation: %d %s\n", fn, errno, strerror(errno));
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return seed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const unsigned int a = 1664525lu;
|
||||||
|
|
||||||
/*!\brief Initialization routine for Uniform/Gaussian random number generators. */
|
/*!\brief Initialization routine for Uniform/Gaussian random number generators. */
|
||||||
void randominit(unsigned long seed_init)
|
void randominit(unsigned long seed_init)
|
||||||
{
|
{
|
||||||
unsigned long seed = seed_init != 0 ? seed_init : get_random_seed();
|
unsigned long seed = seed_init;
|
||||||
|
if (seed_init == 0)
|
||||||
|
fill_random(&seed, sizeof(seed));
|
||||||
printf("Initializing random number generator, seed %ld\n", seed);
|
printf("Initializing random number generator, seed %ld\n", seed);
|
||||||
|
|
||||||
// initialize uniformrandom RNG
|
// initialize uniformrandom RNG
|
||||||
@@ -82,9 +81,7 @@ void randominit(unsigned long seed_init)
|
|||||||
|
|
||||||
double uniformrandom(void)
|
double uniformrandom(void)
|
||||||
{
|
{
|
||||||
#define a 1664525lu
|
const double mod = 4294967296.0; /* is 2**32 */
|
||||||
#define mod 4294967296.0 /* is 2**32 */
|
|
||||||
|
|
||||||
int j = 1 + 97.0 * iy / mod;
|
int j = 1 + 97.0 * iy / mod;
|
||||||
iy = ir[j];
|
iy = ir[j];
|
||||||
urseed = a * urseed; /* mod 2**32 */
|
urseed = a * urseed; /* mod 2**32 */
|
||||||
@@ -197,7 +194,9 @@ double __attribute__ ((no_sanitize_address)) gaussZiggurat(double mean, double v
|
|||||||
{
|
{
|
||||||
if (!tableNordDone) {
|
if (!tableNordDone) {
|
||||||
// let's make reasonnable constant tables
|
// let's make reasonnable constant tables
|
||||||
tableNor(get_random_seed());
|
unsigned long seed;
|
||||||
|
fill_random(&seed, sizeof(seed));
|
||||||
|
tableNor(seed);
|
||||||
}
|
}
|
||||||
hz = SHR3;
|
hz = SHR3;
|
||||||
iz = hz & 127;
|
iz = hz & 127;
|
||||||
|
|||||||
@@ -523,7 +523,7 @@ the value \f$\mathrm{sgn}(u)i\f$. The search requires at most \f$Nbits-1\f$ com
|
|||||||
*/
|
*/
|
||||||
int gauss(unsigned int *gauss_LUT,unsigned char Nbits);
|
int gauss(unsigned int *gauss_LUT,unsigned char Nbits);
|
||||||
|
|
||||||
unsigned long get_random_seed(void);
|
void fill_random(void *buf, size_t sz);
|
||||||
double gaussdouble(double,double);
|
double gaussdouble(double,double);
|
||||||
void randominit(unsigned long seed_init);
|
void randominit(unsigned long seed_init);
|
||||||
double uniformrandom(void);
|
double uniformrandom(void);
|
||||||
|
|||||||
@@ -52,9 +52,9 @@ void set_taus_seed(unsigned int seed_init)
|
|||||||
unsigned long result = 0;
|
unsigned long result = 0;
|
||||||
|
|
||||||
if (seed_init == 0) {
|
if (seed_init == 0) {
|
||||||
s0 = (unsigned int) get_random_seed();
|
fill_random(&s0, sizeof(s0));
|
||||||
s1 = (unsigned int) get_random_seed();
|
fill_random(&s1, sizeof(s1));
|
||||||
s2 = (unsigned int) get_random_seed();
|
fill_random(&s2, sizeof(s2));
|
||||||
} else {
|
} else {
|
||||||
/* Use reentrant version of rand48 to ensure that no conflicts with other generators occur */
|
/* Use reentrant version of rand48 to ensure that no conflicts with other generators occur */
|
||||||
srand48_r((long int)seed_init, &buffer);
|
srand48_r((long int)seed_init, &buffer);
|
||||||
|
|||||||
@@ -144,7 +144,9 @@ class gtpEndPoints {
|
|||||||
map<uint64_t, gtpEndPoint> instances;
|
map<uint64_t, gtpEndPoint> instances;
|
||||||
|
|
||||||
gtpEndPoints() {
|
gtpEndPoints() {
|
||||||
srandom(get_random_seed());
|
unsigned int seed;
|
||||||
|
fill_random(&seed, sizeof(seed));
|
||||||
|
srandom(seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
~gtpEndPoints() {
|
~gtpEndPoints() {
|
||||||
|
|||||||
Reference in New Issue
Block a user