37 uint64_t result = (seed ^ (seed >> 33)) * 0x62a9d9ed799705f5ul;
38 result = (result ^ (result >> 28)) * 0xcb24d0a5c88c35b3ul;
39 return (uint32_t)(result >> 32);
44static inline uint32_t
rol32(const uint32_t
x, const
int k)
46 return (
x <<
k) | (
x >> (32 -
k));
55 const unsigned int result =
state[0] +
state[3];
56 const unsigned int t =
state[1] << 9;
66 return (
float)(result >> 8) * 0x1.0p-24f;
71static inline float uniform_noise(const float
mu, const float
sigma, uint32_t
state[4])
78static inline float gaussian_noise(const float
mu, const float
sigma, const int
flip, uint32_t
state[4])
88 sqrtf(-2.0f * logf(u1)) * sinf(2.f *
M_PI *
u2);
94static inline float poisson_noise(const float
mu, const float
sigma, const int
flip, uint32_t
state[4])
99 const float noise = (
flip) ? sqrtf(-2.0f * logf(u1)) * cosf(2.f *
M_PI *
u2) :
100 sqrtf(-2.0f * logf(u1)) * sinf(2.f *
M_PI *
u2);
150 for(
size_t c = 0;
c < 3;
c++)
154 for(
size_t c = 0;
c < 3;
c++)
162 sqrtf(-2.0f * logf(u1[c])) * sinf(2.f *
M_PI *
u2[c]);
178 for(
size_t c = 0;
c < 3;
c++)
189 sqrtf(-2.0f * logf(u1[c])) * sinf(2.f *
M_PI *
u2[c]);
const dt_colormatrix_t dt_aligned_pixel_t out
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
#define for_each_channel(_var,...)
#define __OMP_DECLARE_SIMD__(...)
static float4 dt_noise_generator_simd(const dt_noise_distribution_t distribution, const float4 mu, const float4 param, uint state[4])
static float4 uniform_noise_simd(const float4 mu, const float4 sigma, uint state[4])
static float4 poisson_noise_simd(const float4 mu, const float4 sigma, uint state[4])
static float4 gaussian_noise_simd(const float4 mu, const float4 sigma, uint state[4])
float *const restrict const size_t k
float dt_aligned_pixel_t[4]
const float uint32_t state[4]
const float const float param
const float const int flip
static uint32_t rol32(const uint32_t x, const int k)
static float xoshiro128plus(uint32_t state[4])
static uint32_t splitmix32(const uint64_t seed)
unsigned __int64 uint64_t