Pertanyaan yang sangat menarik!
Saya mencoba mencari tahu sambil mengetik jawabannya :) Pertama, cara mudah untuk bermain dengannya: 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
Kemudian mari kita pikirkan tentang apa yang kita coba lakukan di sini: Untuk dua koordinat masukan x, y kita mengembalikan sebuah "bilangan acak". Sekarang ini bukan nomor acak. Itu sama setiap kali kita memasukkan x, y yang sama. Ini adalah fungsi hash!
Hal pertama yang dilakukan fungsi ini adalah beralih dari 2d ke 1d. Itu sendiri tidak menarik, tetapi nomornya dipilih sehingga tidak berulang secara khas. Juga kami memiliki tambahan floating point di sana. Akan ada beberapa bit lagi dari y atau x, tetapi angkanya mungkin saja dipilih dengan benar sehingga tercampur.
Kemudian kami mengambil contoh fungsi kotak hitam sin (). Ini akan sangat bergantung pada implementasinya!
Terakhir, ini memperkuat kesalahan dalam implementasi sin () dengan mengalikan dan mengambil pecahan.
Saya tidak berpikir ini adalah fungsi hash yang baik dalam kasus umum. Sin () adalah kotak hitam, di GPU, secara numerik. Seharusnya mungkin untuk membangun yang jauh lebih baik dengan mengambil hampir semua fungsi hash dan mengubahnya. Bagian yang sulit adalah mengubah operasi integer tipikal yang digunakan dalam cpu hashing menjadi operasi float (setengah atau 32bit) atau titik tetap, tetapi itu harus memungkinkan.
Sekali lagi, masalah sebenarnya dengan ini sebagai fungsi hash adalah bahwa sin () adalah kotak hitam.