vSMC
vSMC: Scalable Monte Carlo
Classes | Macros | Functions
normal01.h File Reference
#include <vsmc/rng/internal/common.h>
#include <vsmc/rng/urng.h>
#include <vsmc/rng/u01.h>

Go to the source code of this file.

Classes

struct  normal01_2x32_24
 
struct  normal01_2x32_53
 
struct  normal01_2x64_53
 
struct  normal01_4x32_24
 
struct  normal01_4x32_53
 
struct  normal01_4x64_53
 

Macros

#define NORMAL01_2x32   normal01_2x32_53
 
#define NORMAL01_2x32_INIT   normal01_2x32_53_init
 
#define NORMAL01_2x32_RAND   normal01_2x32_53_rand
 
#define NORMAL01_2x64   normal01_2x64_53
 
#define NORMAL01_2x64_INIT   normal01_2x64_53_init
 
#define NORMAL01_2x64_RAND   normal01_2x64_53_rand
 
#define NORMAL01_4x32   normal01_4x32_53
 
#define NORMAL01_4x32_INIT   normal01_4x32_53_init
 
#define NORMAL01_4x32_RAND   normal01_4x32_53_rand
 
#define NORMAL01_4x64   normal01_4x64_53
 
#define NORMAL01_4x64_INIT   normal01_4x64_53_init
 
#define NORMAL01_4x64_RAND   normal01_4x64_53_rand
 
#define VSMC_DEFINE_RNG_NORMAL01(N, W, F, FT)
 
#define VSMC_DEFINE_RNG_NORMAL01_INIT(N, W, F, FT)
 
#define VSMC_DEFINE_RNG_NORMAL01_RAND(N, W, F, FT)
 

Functions

static void normal01_2x32_24_init (normal01_2x32_24 *rnorm, cburng2x32_rng_t *rng)
 
static float normal01_2x32_24_rand (normal01_2x32_24 *rnorm, cburng2x32_rng_t *rng)
 
static void normal01_2x32_53_init (normal01_2x32_53 *rnorm, cburng2x32_rng_t *rng)
 
static double normal01_2x32_53_rand (normal01_2x32_53 *rnorm, cburng2x32_rng_t *rng)
 
static void normal01_2x64_53_init (normal01_2x64_53 *rnorm, cburng2x64_rng_t *rng)
 
static double normal01_2x64_53_rand (normal01_2x64_53 *rnorm, cburng2x64_rng_t *rng)
 
static void normal01_4x32_24_init (normal01_4x32_24 *rnorm, cburng4x32_rng_t *rng)
 
static float normal01_4x32_24_rand (normal01_4x32_24 *rnorm, cburng4x32_rng_t *rng)
 
static void normal01_4x32_53_init (normal01_4x32_53 *rnorm, cburng4x32_rng_t *rng)
 
static double normal01_4x32_53_rand (normal01_4x32_53 *rnorm, cburng4x32_rng_t *rng)
 
static void normal01_4x64_53_init (normal01_4x64_53 *rnorm, cburng4x64_rng_t *rng)
 
static double normal01_4x64_53_rand (normal01_4x64_53 *rnorm, cburng4x64_rng_t *rng)
 

Macro Definition Documentation

#define NORMAL01_2x32   normal01_2x32_53

Definition at line 83 of file normal01.h.

#define NORMAL01_2x32_INIT   normal01_2x32_53_init

Definition at line 84 of file normal01.h.

#define NORMAL01_2x32_RAND   normal01_2x32_53_rand

Definition at line 85 of file normal01.h.

#define NORMAL01_2x64   normal01_2x64_53

Definition at line 87 of file normal01.h.

#define NORMAL01_2x64_INIT   normal01_2x64_53_init

Definition at line 88 of file normal01.h.

#define NORMAL01_2x64_RAND   normal01_2x64_53_rand

Definition at line 89 of file normal01.h.

#define NORMAL01_4x32   normal01_4x32_53

Definition at line 91 of file normal01.h.

#define NORMAL01_4x32_INIT   normal01_4x32_53_init

Definition at line 92 of file normal01.h.

#define NORMAL01_4x32_RAND   normal01_4x32_53_rand

Definition at line 93 of file normal01.h.

#define NORMAL01_4x64   normal01_4x64_53

Definition at line 95 of file normal01.h.

#define NORMAL01_4x64_INIT   normal01_4x64_53_init

Definition at line 96 of file normal01.h.

#define NORMAL01_4x64_RAND   normal01_4x64_53_rand

Definition at line 97 of file normal01.h.

#define VSMC_DEFINE_RNG_NORMAL01 (   N,
  W,
  F,
  FT 
)
Value:
typedef struct { \
FT u1; \
FT u2; \
unsigned char saved; \
} normal01_##N##x##W##_##F;

Definition at line 111 of file normal01.h.

#define VSMC_DEFINE_RNG_NORMAL01_INIT (   N,
  W,
  F,
  FT 
)
Value:
VSMC_STATIC_INLINE void normal01_##N##x##W##_##F##_init ( \
normal01_##N##x##W##_##F *rnorm, cburng##N##x##W##_rng_t *rng) \
{ \
rnorm->u1 = u01_open_closed_##W##_##F(cburng##N##x##W##_rand(rng)); \
rnorm->u2 = u01_open_closed_##W##_##F(cburng##N##x##W##_rand(rng)); \
rnorm->saved = 1; \
}
#define VSMC_STATIC_INLINE
Definition: common.h:70

Definition at line 118 of file normal01.h.

#define VSMC_DEFINE_RNG_NORMAL01_RAND (   N,
  W,
  F,
  FT 
)
Value:
VSMC_STATIC_INLINE FT normal01_##N##x##W##_##F##_rand ( \
normal01_##N##x##W##_##F *rnorm, cburng##N##x##W##_rng_t *rng) \
{ \
const FT c_2pi = 6.2831853071795865; \
if (rnorm->saved) { \
rnorm->saved = 0; \
return sqrt(-2 * log(rnorm->u1)) * cos(c_2pi * rnorm->u2); \
} else { \
normal01_##N##x##W##_##F##_init(rnorm, rng); \
return sqrt(-2 * log(rnorm->u1)) * sin(c_2pi * rnorm->u2); \
} \
}
#define VSMC_STATIC_INLINE
Definition: common.h:70

Definition at line 127 of file normal01.h.