What algorithm is Rand() based on in C language? [

2019-09-08 19:49发布

问题:

This question already has an answer here:

  • What common algorithms are used for C's rand()? 4 answers

I have been researching the source code of Rand() for a while, but until now I couldn't figure out the whole picture of the function.

The following are the source codes found and researched by me:

rand.c

random.c

Could somebody provide some advices or assistance for me?

Thanks a million!

回答1:

It's not required to be based on any specific algorithm but many will use a linear congruential algorithm to generate the sequences. This basically changes the seed along the following lines:

seed = (seed * multiplier + adder) % modulo

and then deliver some portion of the seed as a random value. The values for multiplier, adder and modulo can vary quite a bit.



回答2:

Rand is based on several things like mac address which should be unique on every machine. there are several implementations to verify that the returned value is "random"