KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm talking about this surprisingly simple implementation of rand() from the C standard: static unsigned long int next = 1; int rand(void) /* RAND_MAX assumed to be 32767. */ { next = next * 1103515245 + 12345; return (unsigned)(next/65536) % 32768; } From this Wikipedia article we know that the multiplier a (in above code a = 1103515245 ) should fulfill only 2 conditions: a - 1 is divisible by all prime factors of m . (In our case m = 2^32 , size of the int, so m has only one prime factor = 2) a - 1 is a multiple of 4 if m is a multiple of 4. (32768 is multiple of 4, and 1103515244 too) Why they have chosen such a strange, hard-to-remember, "man, I'm fed up with these random numbers, write whatever" number, like 1103515245? Maybe there are some wise reasons, that this number is somehow better than the other? For example, why don't set a = 20000000001 ? It's bigger, cool-looking and easier to remember.
Tags (comma-separated)
Save Edits
Cancel