tensor_predictors/tensorPredictors/src/random.h

38 lines
1.2 KiB
C

// /**
// * A sufficient Pseudo-Random-Number-Generators (PRNG) of the Xorshift family
// *
// * For single threaded operations the PRNG provided by `R` are prefered. But they
// * are _not_ thread save. The following is a simple PRNG usable in a multi-threaded
// * application.
// *
// * See TODO: ...https://en.wikipedia.org/wiki/Xorshift
// * SchachHoernchen
// */
// #ifndef INCLUDE_GUARD_RANDOM_H
// #define INCLUDE_GUARD_RANDOM_H
// #include <stdint.h> // uint32_t, uint64_t
// static inline uint64_t rot64(uint64_t val, int shift) {
// return (val << shift) | (val >> (64 - shift));
// }
// // PRNG of the Xorshift family
// // @note the least significant 32 bits are not reliable, use most significant 32 bits
// static inline uint64_t rand_u64(uint64_t seed[4]) {
// uint64_t e = seed[0] - rot64(seed[1], 7);
// seed[0] = seed[1] ^ rot64(seed[1], 13);
// seed[1] = seed[2] + rot64(seed[3], 37);
// seed[2] = seed[3] + e;
// seed[3] = e + seed[0];
// return seed[3];
// }
// static inline double unif_rand_u64(uint64_t seed[4]) {
// return ((double)(rand_u64(seed) >> 32)) / (double)(-(uint32_t)1);
// }
// #endif