【发布时间】:2013-01-23 00:40:43
【问题描述】:
我正在阅读这份文件: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”的 __m128 变量 (四倍 0.5f)和一个变量“三”(四倍 3.0f)。
我知道如何使用 Newton Raphson 来计算函数的零,并且我知道如何使用它来计算数字的平方根,但我只是看不出这段代码是如何执行它的。
谁能给我解释一下?
【问题讨论】:
标签: c++ c math sse newtons-method