Newton Raphson con SSE2: ¿puede alguien explicarme estas 3 líneas?
Estoy leyendo este documento:http://software.intel.com/en-us/articles/interactive-ray-tracing
Y me topé con estas tres líneas de código:
La versión SIMD ya es bastante más rápida, pero podemos hacerlo mejor. Intel ha agregado una función rápida 1 / sqrt (x) al conjunto de instrucciones SSE2. El único inconveniente es que su precisión es limitada. Necesitamos la precisión, entonces la refinamos usando Newton-Rhapson:
__m128 nr = _mm_rsqrt_ps( x );
__m128 muls = _mm_mul_ps( _mm_mul_ps( x, nr ), nr );
result = _mm_mul_ps( _mm_mul_ps( half, nr ), _mm_sub_ps( three, muls ) );
Este código asume la existencia de una variable __m128 llamada 'half' (cuatro veces 0.5f) y una variable 'three' (cuatro veces 3.0f).
Sé cómo usar Newton Raphson para calcular el cero de una función y cómo usarla para calcular la raíz cuadrada de un número, pero no puedo ver cómo lo realiza este código.
¿Puede alguien explicármelo por favor?