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