La función de los spreads de la información contenida en el valor de la entrada a través de la completa de 32 bits, a continuación, escalas hasta el rango de $-1..1$.
Esta primera parte se hace la entrada afectan tanto a la parte inferior y superior de bits:
x = (x << 13) ^ x;
Luego de que la información se transmite a través de la disposición de dominio (32 bits) mediante la multiplicación y la adición a las tres constantes de magnitudes diferentes - uno pequeño, uno mediano y uno grande:
digest = x * (x * x * 15731 + 789221) + 1376312589
Por último, el "azar" entero es reducido. 0x7fffffff
es $2^{31}$, por lo que el bit a bit Y la operación se asegura de que el número está en el rango de $0..2^{31}$. 1073741824
es $2^{30}$, e $2^{31} \div 2^{30} = 2$, así que después de la división de la gama se $0..2$. Restando $1$ cambia el rango de $-1..1$.
return 1.0 - ((digest & 0x7fffffff) / 1073741824.0);
No estoy seguro de por qué las constantes deben ser primos. Tal vez los números primos tienen mejores patrones de bits para este tipo de cosas.
Vale la pena señalar que el resultado de esta función será diferente en diferentes lenguajes de programación. Es muy probable que haya un desbordamiento de entero, que es dependiente del lenguaje incluso para unsigned enteros de 32 bits. En Python3 el número puede ser promovido a tener más de 32 bits, por lo que le dará algún resultado, aunque no habrá desbordamiento (pero desbordamiento puede ser conveniente aumentar la aleatoriedad). En JavaScript de la función de falla por completo para números grandes, debido a que el bit a bit Y siempre resulta en 0 para los números muy grandes (en mis pruebas).