Soy muy consciente de todos los problemas involucrados en la comparación de flotadores. Esta es exactamente la razón de esta pregunta.
Estoy buscando crear una tabla hash rápida para valores que son vectores tridimensionales (3 flotantes - x, y, z). Se puede suponer que la longitud del vector es siempre 1.0 (sqrt(x*x+y*y+z*z)
es 1.0)¿Una buena forma de cortar un vector flotante?
Esencialmente esto significa que estoy buscando una función hash que toma valores que son casi iguales al mismo valor int sin firmar y un correspondiente operador de igualdad que es cierto si los valores de hash son iguales (no no necesariamente sólo si son iguales)
Editar -
los falsos positivos (es decir, vectores que son diferentes pero se correlacionan con el mismo cubo) son un dado desde esta es una tabla hash.
Los negativos falsos (es decir, los vectores que están cerca pero se asignan a diferentes cubos) son indeseables, pero parece que no hay forma de evitarlos. En mi caso, no causarán una rotura total, solo una duplicación de datos que es algo con lo que tendré que vivir.
¡Qué pregunta tan interesante! –
¿Ha considerado usar una o más de las siguientes funciones hash de propósito general: http://www.partow.net/programming/hashfunctions/index.html son extremadamente rápidas y eficientes. –
Relacionados: [¿Cómo puedo encontrar el valor hash de un vector 3D?] (Http://stackoverflow.com/questions/2582340/how-do-i-find-hash-value-of-a-3d-vector) – legends2k