Si hablamos de programación, como suele ser el caso, la raíz cuadrada inversa rápida de Quake 3 Arena merece una mención.
float Q_rsqrt (número flotante)
{
largo i;
flotador x2, y;
const float threehalfs = 1.5F;
x2 = número * 0.5F;
y = número;
i = * (largo *) & y; // piratería de nivel de bits de coma flotante malvada
i = 0x5f3759df – (i >> 1); // ¿Qué es lo {redactado}?
y = * (flotante *) & i;
y = y * (tres medias – (x2 * y * y)); // primera iteración
// y = y * (tres medias – (x2 * y * y)); // 2da iteración, esto se puede eliminar
- ¿Cómo se ve la integridad de NP?
- ¿Qué es el punto de secuencia en c?
- ¿Podemos obtener una función continua si la variable de entrada es discreta?
- ¿Cómo puedo resolver la relación de recurrencia [matemática] F (n) = F (n-1) + 2F (n-2) [/ matemática] dada la siguiente función por partes: F (n) = 1, n = 1 F (n) = 5, n = 2 F (n) = F (n-1) + 2F (n-2), n> = 3?
- ¿Por qué debería elegir especializarme en ciencias de la computación en lugar de las matemáticas?
volver y;
}
Como su nombre lo indica, para una [matemática] x [/ matemática] dada, calcula [matemática] \ sqrt {\ frac {1} {x}} [/ matemática]. La raíz cuadrada inversa es un número increíblemente útil para tener en los juegos 3D, ya que surge en muchos cálculos espaciales. Dicho esto, sacar la raíz cuadrada de algo es una operación bastante costosa para una computadora. Esta función reemplaza una operación matemática costosa con un montón de operaciones y multiplicaciones bit a bit obscenamente baratas .
¿Cómo? Ni idea. Recuerdo débilmente haber leído una explicación, pero básicamente se reduce a
0x5f3759df
siendo un número mágico increíblemente bien elegido para comenzar.
Esta función por sí sola probablemente disparó el rendimiento de Q3A a través del techo, comparativamente.