Я нашел довольно странное, но рабочее квадратное корневое приближение для float
s; Я действительно не понимаю. Может кто-нибудь объяснить мне, почему этот код работает?
float sqrt(float f)
{
const int result = 0x1fbb4000 + (*(int*)&f >> 1);
return *(float*)&result;
}
Я немного протестировал его и он выводит значения std::sqrt()
примерно на 1-3%. Я знаю Quake III быстрый обратный квадратный корень, и я думаю, что здесь что-то похожее (без итерации newton), но я бы очень признателен объяснение того, как это работает.
(nota: Я отметил его как c и С++, ish (см. комментарии) C и С++-код)