diff --git a/xorshift.c b/xorshift.c index 39963d7..cc21dc6 100644 --- a/xorshift.c +++ b/xorshift.c @@ -9,9 +9,10 @@ typedef struct { u64 y; u64 z; u64 w; -} XORShiftBasic; +} XORShift256; -u64 xor_shift_basic_generate(XORShiftBasic *state); +void test_xorshift_256(Pixel *data, u64 w, u64 h); +u64 xorshift_256_generate(XORShift256 *state); int main(int argc, char *argv[]) { struct timespec ts = {0}; @@ -19,23 +20,31 @@ int main(int argc, char *argv[]) { srand48(ts.tv_nsec); - XORShiftBasic state = { + u64 w = 1024; + u64 h = 1024; + u64 length = w * h; + Pixel data[length]; + + test_xorshift_256(data, w, h); + + write_p6_ppm("./outputs/xorshift_256.ppm", w, h, data); + + return EXIT_SUCCESS; +} + +void test_xorshift_256(Pixel *data, u64 w, u64 h) { + XORShift256 state = { .x = lrand48(), .y = lrand48(), .z = lrand48(), .w = lrand48(), }; - u64 w = 1024; - u64 h = 1024; - u64 length = w * h; - - Pixel data[length]; for (u64 y = 0; y < h; ++y) { for (u64 x = 0; x < w; ++x) { u64 i = y * w + x; - u8 pixel = xor_shift_basic_generate(&state) % UINT8_MAX; + u8 pixel = xorshift_256_generate(&state) % UINT8_MAX; data[i] = (Pixel){ .r = pixel, .g = pixel, @@ -43,13 +52,9 @@ int main(int argc, char *argv[]) { }; } } - - write_p6_ppm("./outputs/xorshift.ppm", w, h, data); - - return EXIT_SUCCESS; } -u64 xor_shift_basic_generate(XORShiftBasic *state) { +u64 xorshift_256_generate(XORShift256 *state) { u64 t = state->x ^ (state->x << 11); state->x = state->y;