Nazdar vespolek,
potřeboval jsem udělat hash stringu. Moje hashovací funkce měla mizernou kvalitu (moc často vracela stejný hash), a tak jsem si našel nějakou na netu. Vypadala perfektně. Až do chvíle, kdy mi moje hašovací tabulka začala řvát errory. Po chvilce hledání chyby jsem nakonec neodvratně zamířil do zkopírované hašovací funkce. Jen tak pro srandu jsem ji nechal párkrát proběhnout nad stejným stringem, co bude vracet. No a pak jsem koukal. První hash byl vždy jiný než zbytek. Ta funkce prostě pro jeden string vracela dva hashe podle toho, kolikáté volání se stejným stringem to bylo. A teď proč sem píši. Mohl by někdo z vás objasnit, kde se v té funkci bere ten generátor náhodných čísel??
umsize hash(char * str)
{
umsize result;
for(; *str; ++str)
{
result += *str;
result += (result << 10);
result ^= (result >> 6);
}
result += (result << 3);
result ^= (result >> 11);
result += (result << 15);
return result;
}