Si está interesado, acabo de hacer una función hash que utiliza coma flotante, y se puede dispersar flotadores. También pasa SMHasher (que es la principal prueba de polarización para las funciones hash no criptográficas). Es mucho más lento que las funciones hash no criptográficas normales debido a los cálculos de flotación.
No estoy seguro de si tifuhash será útil para todas las aplicaciones, pero es interesante ver una función de coma flotante simple pasar tanto PractRand como SMHasher.
La principal función de actualización de estado es muy simple, y se parece a:
function q(state, val, numerator, denominator) {
// Continued Fraction mixed with Egyptian fraction "Continued Egyptian Fraction"
// with denominator = val + pos/state[1]
state[0] += numerator/denominator;
state[0] = 1.0/state[0];
// Standard Continued Fraction with a_i = val, b_i = (a_i-1) + i + 1
state[1] += val;
state[1] = numerator/state[1];
}
De todos modos, se puede get it on npm O puede check out the github
El uso es simple:
const tifu = require('tifuhash');
const message = 'The medium is the message.';
const number = 333333333;
const float = Math.PI;
console.log(tifu.hash(message),
tifu.hash(number),
tifu.hash(float),
tifu.hash());
Hay una demostración de algunos hashes en runkit aquí https://runkit.com/593a239c56ebfd0012d15fc9/593e4d7014d66100120ecdb9
Nota al margen: creo que en el futuro, usar coma flotante, posiblemente grandes matrices de cálculos en coma flotante, podría ser una forma útil de hacer más funciones hash computacionalmente exigentes en el futuro. Un extraño efecto secundario que descubrí al utilizar el punto flotante es que los hashes dependen del objetivo, y supongo que tal vez podrían usarse para tomar las huellas digitales de las plataformas en las que se calcularon.
¿Podría explicar un poco más? "La forma habitual de verificar la igualdad flotante es comprobar si está dentro de algún delta (en valor absoluto) de la respuesta correcta". – Pacane
+1 - La respuesta es no hacerlo en primer lugar. No use flotadores como claves en mapas o tablas hash; te encontrarás con problemas tarde o temprano. –
@Leo Davidson Sé que correré en problemas, el objetivo de este ejercicio es encontrar cuándo exactamente ;-) – Pacane