/* Reference Code of a Random Number Generator LFSR (Linear Feedback Shift Register): an example of 32-bit maximal period Galois LFSR from the following site. https://en.wikipedia.org/wiki/Talk:Linear-feedback_shift_register#Simulated_in_simulated_C */ static unsigned int lfsr; void random_generator_reference_init(unsigned int s){ lfsr = s; } unsigned int random_generator_reference(void){ lfsr = (lfsr >> 1) ^ (-(signed int)(lfsr & 1) & 0xd0000001u); /* taps 32 31 29 1 */ return lfsr; }