#include <stdio.h>
#include <math.h>
// https://e...content-available-to-author-only...a.org/wiki/Fast_inverse_square_root
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;
}
void print(float n) {
float result_1 = 1 / n;
float result_2 = Q_rsqrt(n) * Q_rsqrt(n);
printf("%f %f\n", result_1
, result_2
); }
int main() {
print(1000.0f);
print(100.0f);
print(10.0f);
print(1.0f);
print(0.1f);
print(0.01f);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyBodHRwczovL2UuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmEub3JnL3dpa2kvRmFzdF9pbnZlcnNlX3NxdWFyZV9yb290CmZsb2F0IFFfcnNxcnQoIGZsb2F0IG51bWJlciApCnsKICBsb25nIGk7CiAgZmxvYXQgeDIsIHk7CiAgY29uc3QgZmxvYXQgdGhyZWVoYWxmcyA9IDEuNUY7CgogIHgyID0gbnVtYmVyICogMC41RjsKICB5ICA9IG51bWJlcjsKICBpICA9ICogKCBsb25nICogKSAmeTsgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2aWwgZmxvYXRpbmcgcG9pbnQgYml0IGxldmVsIGhhY2tpbmcKICBpICA9IDB4NWYzNzU5ZGYgLSAoIGkgPj4gMSApOyAgICAgICAgICAgICAgIC8vIHdoYXQgdGhlIGZ1Y2s/CiAgeSAgPSAqICggZmxvYXQgKiApICZpOwogIHkgID0geSAqICggdGhyZWVoYWxmcyAtICggeDIgKiB5ICogeSApICk7ICAgLy8gMXN0IGl0ZXJhdGlvbgovL3kgID0geSAqICggdGhyZWVoYWxmcyAtICggeDIgKiB5ICogeSApICk7ICAgLy8gMm5kIGl0ZXJhdGlvbiwgdGhpcyBjYW4gYmUgcmVtb3ZlZAoKICByZXR1cm4geTsKfQoKdm9pZCBwcmludChmbG9hdCBuKSB7CiAgZmxvYXQgcmVzdWx0XzEgPSAxIC8gbjsKICBmbG9hdCByZXN1bHRfMiA9IFFfcnNxcnQobikgKiBRX3JzcXJ0KG4pOwogIHByaW50ZigiJWYgJWZcbiIsIHJlc3VsdF8xLCByZXN1bHRfMik7Cn0KCmludCBtYWluKCkgewogIHByaW50KDEwMDAuMGYpOwogIHByaW50KDEwMC4wZik7CiAgcHJpbnQoMTAuMGYpOwogIHByaW50KDEuMGYpOwogIHByaW50KDAuMWYpOwogIHByaW50KDAuMDFmKTsKICByZXR1cm4gMDsKfQo=