История изменений
Исправление no-such-file, (текущая версия) :
Как-то так
const float precalculatedApproxConstant = 0x5f3759df;
float square(float x) {
return x*x;
}
float firstApproximation(float x) {
int i = *(int*)&x;
i = precalcualtedApproxConstant - (i >> 1);
return *(float*)&i;
}
float secondApproximationNeuton(float firstApproximantion, float x) {
return firstApproximation*(1.5f-(0.5f*x*square(firstApproximation)));
}
float invertedSquareRoot(float x) {
return secondApproximationNeuton(firstApproximation(x), x);
}
Я полагаю конвертирование типов и умножение на 2 можно отдельно не расписывать, т.к. это идиомы Си.
Исходная версия no-such-file, :
Как-то так
const float precalculatedApproxConstant = 0x5f3759df;
float square(float x) {
return x*x;
}
float firstApproximation(float x) {
int i = *(int*)&x;
i = precalcualtedApproxConstant - (i >> 1);
return *(float*)&i;
}
float secondApproximationNeuton(float firstApproximantion, float x) {
float xhalf = 0.5f * x;
return firstApproximation*(1.5f-(xhalf*square(firstApproximation)));
}
float invertedSquareRoot(float x) {
return secondApproximationNeuton(firstApproximation(x), x);
}
Я полагаю конвертирование типов и умножение на 2 можно отдельно не расписывать, т.к. это идиомы Си.