Sono ben consapevole di tutti i problemi relativi al confronto dei galleggianti. Questo è esattamente il motivo di questa domanda.
Sto cercando di creare una tabella hash veloce per valori che sono vettori 3D (3 float - x, y, z). Si può presumere che la lunghezza del vettore sia sempre 1.0 (sqrt(x*x+y*y+z*z)
è 1.0)Un buon modo per cancellare un vettore float?
In sostanza, ciò significa che sto cercando una funzione di hash che accetta valori quasi uguali allo stesso valore int non firmato e una corrispondente operatore di uguaglianza che è true se i valori di hash sono uguali (non non necessariamente solo se sono uguali)
Modifica -
falsi positivi (cioè vettori che sono diversi ma mappano lo stesso secchio) sono un dato di fatto in quanto questa è una tabella hash.
I falsi negativi (vale a dire i vettori che sono vicini ma mappati a diversi contenitori) non sono desiderabili ma sembra che non ci sia modo di evitarli. Nel mio caso, non causeranno la rottura totale, solo alcuni dati duplicati che è qualcosa con cui dovrò convivere.
Che domanda interessante! –
Avete considerato l'utilizzo di una o più delle seguenti funzioni hash generali: http://www.partow.net/programming/hashfunctions/index.html sono estremamente veloci ed efficienti. –
Correlati: [Come trovare il valore hash di un vettore 3D?] (Http://stackoverflow.com/questions/2582340/how-do-i-find-hash-value-of-a-3d-vector) – legends2k