このドキュメントを読んでいます: http://software.intel.com/en-us/articles/interactive-ray-tracing
そして、次の 3 行のコードに出くわしました。
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 ) );
このコードは、'half' (0.5f の 4 倍) という名前の __m128 変数と変数 'three' (3.0f の 4 倍) の存在を前提としています。
Newton Raphson を使用して関数のゼロを計算する方法と、それを使用して数値の平方根を計算する方法は知っていますが、このコードがそれをどのように実行するかはわかりません。
誰か説明してくれませんか?