#include <stdio.h>
#include <math.h>
float f(float n) {
n = 1.0f / n;
long i;
float x, y;
x = n * 0.5f;
y = n;
i = *(long *)&y;
i = 0x5f3759df - (i >> 1);
y = *(float *)&i;
y = y * (1.5f - (x * y * y));
return y;
}
int main(void) {
int n = 4, x[] = {4, 64, 10000, 2};
float r, s, d;
for (int i = 0; i < n; i++) {
r = f(x[i]);
s = sqrtf(x[i]);
d = fabsf((fabsf(r) - s) / s) * 100.0f;
printf("%d\t%f\t%f\t%f\n", x
[i
], r
, s
, d
); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgpmbG9hdCBmKGZsb2F0IG4pIHsKICAgIG4gPSAxLjBmIC8gbjsKICAgIGxvbmcgaTsKICAgIGZsb2F0IHgsIHk7CgogICAgeCA9IG4gKiAwLjVmOwogICAgeSA9IG47CiAgICBpID0gKihsb25nICopJnk7CiAgICBpID0gMHg1ZjM3NTlkZiAtIChpID4+IDEpOwogICAgeSA9ICooZmxvYXQgKikmaTsKICAgIHkgPSB5ICogKDEuNWYgLSAoeCAqIHkgKiB5KSk7CgogICAgcmV0dXJuIHk7Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBuID0gNCwgeFtdID0gezQsIDY0LCAxMDAwMCwgMn07CglmbG9hdCByLCBzLCBkOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJciA9IGYoeFtpXSk7CgkJcyA9IHNxcnRmKHhbaV0pOwoJCWQgPSBmYWJzZigoZmFic2YocikgLSBzKSAvIHMpICogMTAwLjBmOwoJCXByaW50ZigiJWRcdCVmXHQlZlx0JWZcbiIsIHhbaV0sIHIsIHMsIGQpOwoJfQoKCXJldHVybiAwOwp9