#include <stdio.h>
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
return y;
}
int main(void) {
printf("%f\n", 1.0f/Q_rsqrt
(144.0f)); // 12 printf("%f\n", 1.0f/Q_rsqrt
(289.0f)); // 17 printf("%f\n", 1.0f/Q_rsqrt
(25472209.0f)); // 5047 printf("%f\n", 1.0f/Q_rsqrt
(95775582.25f)); // 9786,5 return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpmbG9hdCBRX3JzcXJ0KCBmbG9hdCBudW1iZXIgKQp7Cglsb25nIGk7CglmbG9hdCB4MiwgeTsKCWNvbnN0IGZsb2F0IHRocmVlaGFsZnMgPSAxLjVGOwogCgl4MiA9IG51bWJlciAqIDAuNUY7Cgl5ICA9IG51bWJlcjsKCWkgID0gKiAoIGxvbmcgKiApICZ5OyAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZpbCBmbG9hdGluZyBwb2ludCBiaXQgbGV2ZWwgaGFja2luZwoJaSAgPSAweDVmMzc1OWRmIC0gKCBpID4+IDEgKTsgICAgICAgICAgICAgICAvLyB3aGF0IHRoZSBmdWNrPwoJeSAgPSAqICggZmxvYXQgKiApICZpOwoJeSAgPSB5ICogKCB0aHJlZWhhbGZzIC0gKCB4MiAqIHkgKiB5ICkgKTsgICAvLyAxc3QgaXRlcmF0aW9uCiAgICAgIHkgID0geSAqICggdGhyZWVoYWxmcyAtICggeDIgKiB5ICogeSApICk7ICAgLy8gMm5kIGl0ZXJhdGlvbiwgdGhpcyBjYW4gYmUgcmVtb3ZlZAogCglyZXR1cm4geTsKfQoKaW50IG1haW4odm9pZCkgewoJcHJpbnRmKCIlZlxuIiwgMS4wZi9RX3JzcXJ0KDE0NC4wZikpOyAvLyAxMgoJcHJpbnRmKCIlZlxuIiwgMS4wZi9RX3JzcXJ0KDI4OS4wZikpOyAvLyAxNwoJcHJpbnRmKCIlZlxuIiwgMS4wZi9RX3JzcXJ0KDI1NDcyMjA5LjBmKSk7IC8vIDUwNDcKCXByaW50ZigiJWZcbiIsIDEuMGYvUV9yc3FydCg5NTc3NTU4Mi4yNWYpKTsgLy8gOTc4Niw1CglyZXR1cm4gMDsKfQo=