¡Pregunta muy interesante!
Estoy tratando de resolver esto mientras escribo la respuesta :) Primero, una forma fácil de jugar: http://www.wolframalpha.com/input/?i=plot%28+mod%28+sin%28x*12.9898 +% 2B + y * 78.233% 29 + * + 43758.5453% 2C1% 29x% 3D0..2% 2C + y% 3D0..2% 29
Entonces pensemos en lo que estamos tratando de hacer aquí: Para dos coordenadas de entrada x, y devolvemos un "número aleatorio". Ahora bien, este no es un número aleatorio. Es lo mismo cada vez que ingresamos la misma x, y. ¡Es una función hash!
Lo primero que hace la función es pasar de 2d a 1d. Eso no es interesante en sí mismo, pero los números se eligen para que no se repitan normalmente. También tenemos una adición de punto flotante allí. Habrá algunos bits más de yox, pero es posible que los números se elijan correctamente para que se mezclen.
Luego, probamos una función sin () de caja negra. ¡Esto dependerá mucho de la implementación!
Por último, amplifica el error en la implementación sin () multiplicando y tomando la fracción.
No creo que esta sea una buena función hash en el caso general. El sin () es una caja negra, en la GPU, numéricamente. Debería ser posible construir uno mucho mejor tomando casi cualquier función hash y convirtiéndola. La parte difícil es convertir la operación de entero típica utilizada en el hash de la CPU en operaciones flotantes (de medio o 32 bits) o de punto fijo, pero debería ser posible.
Nuevamente, el verdadero problema con esto como función hash es que sin () es una caja negra.