c/c++随机数生成函数的实现原理及库函数源码

对于c/c++下生成随机数的函数用法再熟悉不过了,现在让我们一探究竟,看看该函数的底层实现。

函数原型及简单应用示例如下:

来自devc++的stdlib.h
来自devc++的stdlib.h

// review
#include   	// 日常随机数生成用法
#include 
int main()
{
	srand (time(NULL));
	rand() % n;  		// n是一个你自定义的正整数,结果就生成了一个0~n-1的正整数;至于在特定区间取随机就是一个简单的变形,不再赘述。
	return 0;
}

c库源码如下:


#include 
#include 
#include 
#include 

int __cdecl rand (void)
{
        _ptiddata ptd = _getptd();

        return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );
}

void __cdecl srand (unsigned int seed)
{
        _getptd()->_holdrand = (unsigned long)seed;
}

也可简单理解成如下:

int rand()
{
    static int x = 1;
    x = x * 214013 + 2531011;
    x = (x >> 16) & 0x7fff;
    return x;
}

注:我们都知道 rand() 实现的伪随机(默认 seed 为 1);所以用 srand() 实现真随机,实现方法就是将 seed 换成了不同的值,而常用的seed就是time(NULL)。

你可能感兴趣的:(c/c++随机数生成)