Понимание алгоритма функции rand () в Visual C ++

В C / C ++, rand () и srand () обычно используются нами, когда мы хотим получить случайное целое число. Но когда я сам попробовал его переписать, мне стало сложно понять алгоритм. Функцию очень легко написать всего в нескольких строках, но формула непонятна.

Основная формула:

ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L;

Используемый исходный код:

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

int __cdecl rand (void)
{
    _ptiddata ptd = _getptd();
    return ( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );
}
11
задан Peter Mortensen 23 July 2011 в 00:48
поделиться