Как работает это приближение квадратного корня с плавающей точкой?
Я нашел довольно странное, но работающее приближение квадратного корня дляfloat
s; Я действительно не понимаю. Может кто-нибудь объяснить мне, почему этот код работает?
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 ++ код)