Как работает это приближение квадратного корня с плавающей точкой?

Я нашел довольно странное, но работающее приближение квадратного корня дляfloats; Я действительно не понимаю. Может кто-нибудь объяснить мне, почему этот код работает?

float sqrt(float f)
{
    const int result = 0x1fbb4000 + (*(int*)&f >> 1);
    return *(float*)&result;   
}

Я немного проверил иit выводит значения изstd::sqrt() примерно на 1-3%. Я знаю о Quake III' быстрый обратный квадратный корень и я думаю, что здесь что-то похожее (без итерации Ньютона), но я бы очень признателен за объяснениекак это работае.

(примечание: я отметил это обаc а такжеc ++ поскольку он действителен (см. комментарии) C и C ++ код)

Ответы на вопрос(4)

Ваш ответ на вопрос