пятница, 14 ноября 2008 г.

Fast Inverse Square Root

Баян для занимающихся 3D.

Итак...нужно посчитать 1/sqrt(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;

}



магия в чистом виде...

дзен заключен в этой строчке:

    i = 0x5f3759df - (i>>1);

Комментариев нет: