пятница, 21 апреля 2017 г.

Хорошая работа, 0x5f3759df!

Какая, однако, прелесть:
float Q_rsqrt( float number )
{
 long i;
 float x2, y;
 const float threehalfs = 1.5F;

 x2 = number * 0.5F;
 y  = number;
 i  = * ( long * ) &y;                       // evil floating point bit level hacking
 i  = 0x5f3759df - ( i >> 1 );               // what the fuck? 
 y  = * ( float * ) &i;
 y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
// y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

 return y;
}

Это маленький кусочек кода из Quake III: Arena. А вся история - вот тут, на вики.

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

Отправить комментарий

Спутник взлетает. Первая ступень отработала.

 И, кажется, неплохо: Посмотрим, что будет когда отработает вторая.