double rngWELLRNG1024a (well *state){ state->z0 = VRm1; state->z1 = Identity(V0) ^ MAT0POS (8, VM1); state->z2 = MAT0NEG (-19, VM2) ^ MAT0NEG(-14,VM3); newV1 = state->z1 ^ state->z2; newV0 = MAT0NEG (-11,state->z0) ^ MAT0NEG(-7,state->z1) ^ MAT0NEG(-13,state->z2) ; state->state_i = (state->state_i + 31) & 0x0000001fU; return ((double) state->STATE[state->state_i] * FACT); }
static unsigned long int next() { z0 = VRm1; z1 = Identity(V0) ^ MAT0POS (8, VM1); z2 = MAT0NEG (-19, VM2) ^ MAT0NEG(-14,VM3); newV1 = z1 ^ z2; newV0 = MAT0NEG (-11,z0) ^ MAT0NEG(-7,z1) ^ MAT0NEG(-13,z2) ; state_i = (state_i + 31) & 0x0000001fU; return STATE[state_i]; }
double WELL::WELLRNG1024a (void){ z0 = VRm1; z1 = Identity(V0) ^ MAT0POS (8, VM1); z2 = MAT0NEG (-19, VM2) ^ MAT0NEG(-14,VM3); newV1 = z1 ^ z2; newV0 = MAT0NEG (-11,z0) ^ MAT0NEG(-7,z1) ^ MAT0NEG(-13,z2) ; state_i = (state_i + 31) & 0x0000001fU; return ((double) STATE[state_i] * FACT); }
// state_i == 1 static double case_2(void){ z0 = (Vrm1 & MASKL) | (Vrm2Under & MASKU); z1 = MAT0NEG(-24,V0) ^ MAT0POS(30,VM1); z2 = MAT0NEG(-10,VM2) ^ MAT3NEG(-26,VM3); newV1 = z1 ^ z2; newV0 = MAT1(z0) ^ MAT0POS(20,z1) ^ MAT5(9,0xb729fcecU,0xfbffffffU,0x00020000U,z2) ^ MAT1(newV1); state_i=0; WELLRNG44497a = case_1; return ((double) STATE[state_i] * FACT); }
// R-M1-1 >= state_i >= R-M3 static double case_4(void){ z0 = (Vrm1 & MASKL) | (Vrm2 & MASKU); z1 = MAT0NEG(-24,V0) ^ MAT0POS(30,VM1); z2 = MAT0NEG(-10,VM2Over) ^ MAT3NEG(-26,VM3Over); newV1 = z1 ^ z2; newV0 = MAT1(z0) ^ MAT0POS(20,z1) ^ MAT5(9,0xb729fcecU,0xfbffffffU,0x00020000U,z2) ^ MAT1(newV1); state_i--; if (state_i+M3 < R) WELLRNG44497a = case_5; return ((double) STATE[state_i] * FACT); }
// state_i == 1 static double case_2(void) { z0 = (Vrm1 & MASKL) | (Vrm2Under & MASKU); z1 = MAT0POS(28,V0) ^ MAT1(VM1); z2 = MAT0POS(18,VM2) ^ MAT0POS(3,VM3); newV1 = z1 ^ z2; newV0 = MAT0POS(21,z0) ^ MAT0NEG(-17,z1) ^ MAT0NEG(-28,z2) ^ MAT0NEG(-1,newV1); state_i=0; WELLRNG23209a = case_1; return ((double) STATE[state_i] * FACT); }
double well1024 (void) { well1024_z0 = VRm1; well1024_z1 = Identity(V0) ^ MAT0POS(8, VM1); well1024_z2 = MAT0NEG(-19, VM2) ^ MAT0NEG(-14,VM3); newV1 = well1024_z1 ^ well1024_z2; newV0 = MAT0NEG(-11,well1024_z0) ^ MAT0NEG(-7, well1024_z1) ^ MAT0NEG(-13,well1024_z2); well1024_state_i = (well1024_state_i + 31) & 0x0000001fU; return 2.32830643653869628906e-10 * well1024_STATE[well1024_state_i]; }
// R-M3-1 >= state_i >= R-M1 static double case_5(void) { z0 = (Vrm1 & MASKL) | (Vrm2 & MASKU); z1 = MAT0POS(28,V0) ^ MAT1(VM1Over); z2 = MAT0POS(18,VM2) ^ MAT0POS(3,VM3); newV1 = z1 ^ z2; newV0 = MAT0POS(21,z0) ^ MAT0NEG(-17,z1) ^ MAT0NEG(-28,z2) ^ MAT0NEG(-1,newV1); state_i--; if(state_i+M1 < R) WELLRNG23209a = case_6; return ((double) STATE[state_i] * FACT); }
static double case_2(void){ // state_i == 1 z0 = (Vrm1 & MASKL) | (Vrm2Under & MASKU); z1 = MAT0NEG(-24,V0) ^ MAT0POS(30,VM1); z2 = MAT0NEG(-10,VM2) ^ MAT3NEG(-26,VM3); newV1 = z1 ^ z2; newV0 = MAT1(z0) ^ MAT0POS(20,z1) ^ MAT5(9,0xb729fcecU,0xfbffffffU,0x00020000U,z2) ^ MAT1(newV1); state_i=0; WELLRNG44497a = case_1; #ifdef TEMPERING y = STATE[state_i] ^ ((STATE[state_i] << 7) & TEMPERB); y = y ^ (( y << 15) & TEMPERC); return ((double) y * FACT); #else return ((double) STATE[state_i] * FACT); #endif }
static unsigned int case_2 (void){ // state_i == 1 z0 = (VRm1 & MASKL) | (VRm2Under & MASKU); z1 = MAT0NEG (-25, V0) ^ MAT0POS (27, VM1); z2 = MAT3POS (9, VM2) ^ MAT0POS (1, VM3); newV1 = z1 ^ z2; newV0 = MAT1 (z0) ^ MAT0NEG (-9, z1) ^ MAT0NEG (-21, z2) ^ MAT0POS (21, newV1); state_i = 0; WELLRNG19937a = case_1; #ifdef TEMPERING y = STATE[state_i] ^ ((STATE[state_i] << 7) & TEMPERB); y = y ^ (( y << 15) & TEMPERC); return (y); #else return (STATE[state_i]); #endif }
static unsigned int case_5 (void){ // state_i+M2 >= R z0 = (VRm1 & MASKL) | (VRm2 & MASKU); z1 = MAT0NEG (-25, V0) ^ MAT0POS (27, VM1); z2 = MAT3POS (9, VM2Over) ^ MAT0POS (1, VM3Over); newV1 = z1 ^ z2; newV0 = MAT1 (z0) ^ MAT0NEG (-9, z1) ^ MAT0NEG (-21, z2) ^ MAT0POS (21, newV1); state_i -= 1; if (state_i + M2 < R) WELLRNG19937a = case_4; #ifdef TEMPERING y = STATE[state_i] ^ ((STATE[state_i] << 7) & TEMPERB); y = y ^ (( y << 15) & TEMPERC); return (y); #else return (STATE[state_i]); #endif }
static double case_4(void){ // state_i+M3 >= R z0 = (Vrm1 & MASKL) | (Vrm2 & MASKU); z1 = MAT0NEG(-24,V0) ^ MAT0POS(30,VM1); z2 = MAT0NEG(-10,VM2Over) ^ MAT3NEG(-26,VM3Over); newV1 = z1 ^ z2; newV0 = MAT1(z0) ^ MAT0POS(20,z1) ^ MAT5(9,0xb729fcecU,0xfbffffffU,0x00020000U,z2) ^ MAT1(newV1); state_i--; if (state_i+M3 < R) WELLRNG44497b = case_5; #ifdef TEMPERING y = STATE[state_i] ^ ((STATE[state_i] << 7) & TEMPERB); y = y ^ (( y << 15) & TEMPERC); return ((double) y * FACT); #else return ((double) STATE[state_i] * FACT); #endif }