非常に興味深い質問です。
私は答えを入力しながらこれを理解しようとしています:)まずそれをいじる簡単な方法: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
次に、ここで何をしようとしているのかを考えてみましょう。2つの入力座標x、yに対して、「乱数」を返します。しかし、これは乱数ではありません。同じx、yを入力するたびに同じです。ハッシュ関数です!
関数が最初に行うことは、2dから1dに移行することです。それ自体は興味深いことではありませんが、通常は繰り返されないように番号が選択されています。また、浮動小数点数も追加されています。yまたはxからさらに数ビットありますが、数値が適切に選択されているため、ミックスされます。
次に、ブラックボックスのsin()関数をサンプリングします。これは実装に大きく依存します!
最後に、分数を乗算して取得することにより、sin()実装のエラーを増幅します。
これは一般的なケースでは良いハッシュ関数ではないと思います。sin()は、GPUでは数値的にブラックボックスです。ほぼすべてのハッシュ関数を取得して変換することで、より優れたものを構築できるはずです。難しいのは、CPUハッシュで使用される一般的な整数演算を浮動小数点演算(半分または32ビット)または固定小数点演算に変換することですが、それは可能であるはずです。
繰り返しになりますが、ハッシュ関数としてのこれの実際の問題は、sin()がブラックボックスであることです。