Sehr interessante Frage!
Ich versuche dies herauszufinden, während ich die Antwort eingebe :) Zuerst eine einfache Möglichkeit, damit zu spielen: 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
Überlegen wir uns dann, was wir hier versuchen: Für zwei Eingabekoordinaten x, y geben wir eine "Zufallszahl" zurück. Dies ist jedoch keine Zufallszahl. Es ist jedes Mal dasselbe, wenn wir dasselbe x, y eingeben. Es ist eine Hash-Funktion!
Das erste, was die Funktion tut, ist, von 2d auf 1d zu gehen. Das ist an sich nicht interessant, aber die Zahlen werden so gewählt, dass sie sich normalerweise nicht wiederholen. Außerdem haben wir dort eine Gleitkommaaddition. Es wird noch ein paar Bits von y oder x geben, aber die Zahlen könnten einfach richtig gewählt werden, damit eine Mischung entsteht.
Dann probieren wir eine Black-Box-Funktion sin () aus. Dies hängt stark von der Implementierung ab!
Zuletzt wird der Fehler in der sin () - Implementierung durch Multiplizieren und Nehmen des Bruchs verstärkt.
Ich denke nicht, dass dies im allgemeinen Fall eine gute Hash-Funktion ist. Die sin () ist numerisch eine Black Box auf der GPU. Es sollte möglich sein, eine viel bessere zu konstruieren, indem fast jede Hash-Funktion übernommen und konvertiert wird. Der schwierige Teil besteht darin, die typische Ganzzahloperation, die beim CPU-Hashing verwendet wird, in Float- (Halb- oder 32-Bit-) oder Festkommaoperationen umzuwandeln, dies sollte jedoch möglich sein.
Das eigentliche Problem bei dieser Hash-Funktion ist wiederum, dass sin () eine Black Box ist.