7#include "../../../include/lammp/mprand.h"
8#include "../../../include/lammp/impl/rand_state.h"
9#include "../../../include/lammp/impl/tmp_alloc.h"
16#define GLOBAL_RNG_INIT_STATE 10451216379200822465ULL
17#define GLOBAL_RNG_INIT_SEED_TYPE 1
31 for (; i + 3 < n; i += 4) {
44 for (; i + 3 < n; i += 4) {
54 while (n > 0 && dst[n - 1] == 0) {
61 if (n == 0 || dst == NULL) {
90 if (k <= rng->stream.k)
return;
115 while (n > 0 && dst[n - 1] == 0) {
void * lmmp_realloc(void *ptr, size_t size)
内存重分配函数(调用lmmp_realloc_fn)
void * lmmp_alloc(size_t size)
内存分配函数(调用lmmp_heap_alloc_fn)
#define LAMMP_THREAD_LOCAL
void lmmp_free(void *ptr)
内存释放函数(调用lmmp_heap_free_fn)
#define lmmp_param_assert(x)
#define GLOBAL_RNG_INIT_SEED_TYPE
void lmmp_global_rng_init_(int seed, int seed_type)
初始化全局随机数生成器
void lmmp_strong_rng_free_(lmmp_strong_rng_t *rng)
销毁强随机数生成器
mp_size_t lmmp_strong_random_(mp_ptr restrict dst, mp_size_t n, lmmp_strong_rng_t *rng)
lmmp_strong_rng_t * lmmp_strong_rng_init_(mp_size_t k, int seed)
创建k维度强随机数生成器
#define GLOBAL_RNG_INIT_STATE
void lmmp_strong_rng_extern_(lmmp_strong_rng_t *rng, mp_size_t k)
将rng内部状态拓展至k维度
mp_size_t lmmp_seed_random_(mp_ptr restrict dst, mp_size_t n, mp_limb_t seed, int seed_type)
static _Thread_local lmmp_global_rng_t lmmp_global_rng
mp_size_t lmmp_random_(mp_ptr restrict dst, mp_size_t n)
static void pcg64_le_seq_init(pcg64_le_seq_t *rng, mp_size_t i, mp_limb_t seed)
mp_limb_t *restrict state
static mp_limb_t lmmp_xoshiro256pp_random(xoshiro256pp_state *rng)
static void lmmp_xoshiro256pp_srandom(xoshiro256pp_state *rng, mp_limb_t seed)
static mp_limb_t lmmp_seed_generator(mp_limb_t seed)
种子生成器
static void lmmp_pcg64_128_srandom(pcg64_128_state *rng, mp_limb_t seed)
static mp_limb_t rotl(const mp_limb_t x, int k)
static mp_limb_t lmmp_pcg64_128_random(pcg64_128_state *rng)
static void pcg64_le_seq_next(mp_ptr restrict dst, mp_size_t n, pcg64_le_seq_t *rng)
#define ALLOC_TYPE(n, type)