我正在阅读这份文件: http: //software.intel.com/en-us/articles/interactive-ray-tracing
我偶然发现了这三行代码:
SIMD 版本已经快了很多,但我们可以做得更好。英特尔在 SSE2 指令集中添加了快速 1/sqrt(x) 函数。唯一的缺点是它的精度是有限的。我们需要精度,因此我们使用 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 ) );
此代码假定存在一个名为“half”(四倍 0.5f)的 __m128 变量和一个变量“three”(四倍 3.0f)。
我知道如何使用 Newton Raphson 来计算函数的零,并且我知道如何使用它来计算数字的平方根,但我只是看不出这段代码是如何执行它的。
有人可以向我解释一下吗?