Я читаю этот документ: http://software.intel.com/en-us/articles/interactive-ray-tracing
и я наткнулся на эти три строки кода:
SIMD-версия уже немного быстрее, но мы можем сделать лучше. Intel добавила быструю 1/sqrt (x) функцию в набор инструкций SSE2. Единственным недостатком является то, что его точность ограничена. Нам нужно точность, поэтому мы уточняем его с помощью 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 ) );
Этот код предполагает существование переменной __m128 с именем 'half' (четыре раза 0,5f) и переменную "три" (четыре раза 3.0f).
Я знаю, как использовать Ньютона Рафсона для вычисления нулевой функции, и я знаю, как использовать его для вычисления квадратного корня числа, но я просто не вижу, как этот код выполняет его.
Может кто-нибудь объяснить это мне, пожалуйста?