/* Generate 16 bit random numbers using PCG. Copied from various bits here: https://github.com/imneme/pcg-c/blob/master/include/pcg_variants.h */ #include #define OUTPUT_WIDTH 256 #define OUTPUT_HEIGHT 256 #define PCG_DEFAULT_MULTIPLIER_32 747796405U #define PCG_DEFAULT_INCREMENT_32 2891336453U static unsigned int state = 0x46b56677; static int pcg_random() { int output; /* pcg_oneseq_32_step_r */ state = state * PCG_DEFAULT_MULTIPLIER_32 + PCG_DEFAULT_INCREMENT_32; /* pcg_output_xsh_rs_32_16 */ output = ((state >> 11) ^ state) >> ((state >> 30) + 11); return output & 0xffff; } int main(int argc, char **argv) { int x, y; printf("P2\n%d %d\n255\n", OUTPUT_WIDTH, OUTPUT_HEIGHT); for(y = 0; y < OUTPUT_HEIGHT; y++) { for(x = 0; x < OUTPUT_WIDTH; x++) printf(" %d", pcg_random() >> 8); putchar('\n'); } return 0; }