20#include <grass/glocale.h>
22#ifdef HAVE_GETTIMEOFDAY
36static const uint32 a0 = 0xE66D;
37static const uint32 a1 = 0xDEEC;
38static const uint32 a2 = 0x5;
40static const uint32 b0 = 0xB;
44#define LO(x) ((x)&0xFFFFU)
45#define HI(x) ((x) >> 16)
75 char *grass_random_seed = getenv(
"GRASS_RANDOM_SEED");
77 if (!grass_random_seed)
78 grass_random_seed = getenv(
"SOURCE_DATE_EPOCH");
79 if (grass_random_seed) {
80 seed = strtoull(grass_random_seed,
NULL, 10);
83 seed = (
unsigned long)getpid();
85#ifdef HAVE_GETTIMEOFDAY
89 if (gettimeofday(&tv,
NULL) < 0)
91 seed += (
unsigned long)tv.tv_sec;
92 seed += (
unsigned long)tv.tv_usec;
96 time_t
t = time(
NULL);
98 seed += (
unsigned long)
t;
107static void G__next(
void)
121 G_fatal_error(_(
"Pseudo-random number generator not seeded"));
176 r /= 281474976710656.0;
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
long G_mrand48(void)
Generate an integer in the range [-2^31, 2^31)
long G_lrand48(void)
Generate an integer in the range [0, 2^31)
long G_srand48_auto(void)
Seed the pseudo-random number generator from the time and PID.
void G_srand48(long seedval)
Seed the pseudo-random number generator.
double G_drand48(void)
Generate a floating-point value in the range [0,1)