CPP C++ logo

В статье Origin of Quake3’s Fast InvSqrt() идет речь о быстром InvSqrt():

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
float InvSqrt(float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}
float InvSqrt(float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759df - (i>>1); x = *(float*)&i; x = x*(1.5f - xhalf*x*x); return x; }
float InvSqrt(float x)
{
   float xhalf = 0.5f*x;
   int i = *(int*)&x;
   i = 0x5f3759df - (i>>1);
   x = *(float*)&i;
   x = x*(1.5f - xhalf*x*x);
   return x;
}

Почитайте в статье про “магическую” константу 0x5f3759df и про приведение к int.

Так же в статье приводится письмо John Carmack, который подтверждает, что этот код принадлежит не ему.