В 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 );
}