Funkcja mieszania z ciągiem do liczby całkowitej z precyzją
Chcę mieszać tablicę znaków w int lub long. Wynikowa wartość musi być zgodna z określoną wartością dokładności. Używana przeze mnie funkcja jest podana poniżej:
<code>int GetHash(const char* zKey, int iPrecision /*= 6*/) { /////FROM : http://courses.cs.vt.edu/~cs2604/spring02/Projects/4/elfhash.cpp unsigned long h = 0; long M = pow(10, iPrecision); while(*zKey) { h = (h << 4) + *zKey++; unsigned long g = h & 0xF0000000L; if (g) h ^= g >> 24; h &= ~g; } return (int) (h % M); } </code>
Łańcuch do mieszania jest podobny do „SAEUI1210.00000010_1”.
Jednak w niektórych przypadkach powoduje to powielenie wartości. Czy są jakieś dobre alternatywy, które nie powielają tego samego skrótu dla różnych wartości ciągu.