38 #ifndef _MCEXTREME_LOGISTIC_RAND_H 39 #define _MCEXTREME_LOGISTIC_RAND_H 45 #define __device__ static inline 47 #ifndef DOUBLE_PREC_LOGISTIC 48 typedef float RandType;
50 typedef double RandType;
53 #define MCX_RNG_NAME "Logistic-Lattice" 55 #define RAND_BUF_LEN 5 //register arrays 56 #define RAND_SEED_WORD_LEN 5 //32bit seed length (32*5=160bits) 58 __device__
void rand_need_more(RandType t[RAND_BUF_LEN], RandType tbuf[RAND_BUF_LEN]);
59 __device__
void logistic_init(RandType* t, RandType* tnew, uint seed[], uint idx);
61 __device__ RandType rand_uniform01(RandType v);
62 __device__
void rng_init(RandType t[RAND_BUF_LEN], RandType tnew[RAND_BUF_LEN], uint* n_seed,
int idx);
73 #ifdef MMC_USE_SSE_MATH 74 __device__
void rand_next_aangle_sincos(RandType t[RAND_BUF_LEN],
float* si,
float* co);
75 __device__
float rand_next_scatlen_ps(RandType t[RAND_BUF_LEN]);
__device__ float rand_do_roulette(RandType t[RAND_BUF_LEN])
generate random number for the next zenith angle
Definition: mmc_rand_common.h:62
__device__ float rand_next_aangle(RandType t[RAND_BUF_LEN])
generate [0,1] random number for the next arimuthal angle
Definition: mmc_rand_common.h:50
__device__ float rand_next_scatlen(RandType t[RAND_BUF_LEN])
generate [0,1] random number for the next scattering length
Definition: mmc_rand_common.h:46
__device__ float rand_next_reflect(RandType t[RAND_BUF_LEN])
generate random number for reflection test
Definition: mmc_rand_common.h:58
__device__ float rand_next_zangle(RandType t[RAND_BUF_LEN])
generate random number for the next zenith angle
Definition: mmc_rand_common.h:54