#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 x = Q_rsqrt(n);
float result_2 = x * x;
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+CiAKLy8gaHR0cHM6Ly9lLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLm9yZy93aWtpL0Zhc3RfaW52ZXJzZV9zcXVhcmVfcm9vdApmbG9hdCBRX3JzcXJ0KCBmbG9hdCBudW1iZXIgKQp7CiAgbG9uZyBpOwogIGZsb2F0IHgyLCB5OwogIGNvbnN0IGZsb2F0IHRocmVlaGFsZnMgPSAxLjVGOwogCiAgeDIgPSBudW1iZXIgKiAwLjVGOwogIHkgID0gbnVtYmVyOwogIGkgID0gKiAoIGxvbmcgKiApICZ5OyAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZpbCBmbG9hdGluZyBwb2ludCBiaXQgbGV2ZWwgaGFja2luZwogIGkgID0gMHg1ZjM3NTlkZiAtICggaSA+PiAxICk7ICAgICAgICAgICAgICAgLy8gd2hhdCB0aGUgZnVjaz8KICB5ICA9ICogKCBmbG9hdCAqICkgJmk7CiAgeSAgPSB5ICogKCB0aHJlZWhhbGZzIC0gKCB4MiAqIHkgKiB5ICkgKTsgICAvLyAxc3QgaXRlcmF0aW9uCi8veSAgPSB5ICogKCB0aHJlZWhhbGZzIC0gKCB4MiAqIHkgKiB5ICkgKTsgICAvLyAybmQgaXRlcmF0aW9uLCB0aGlzIGNhbiBiZSByZW1vdmVkCiAKICByZXR1cm4geTsKfQogCnZvaWQgcHJpbnQoZmxvYXQgbikgewogIGZsb2F0IHJlc3VsdF8xID0gMSAvIG47CiAgCiAgZmxvYXQgeCA9IFFfcnNxcnQobik7CiAgZmxvYXQgcmVzdWx0XzIgPSB4ICogeDsKICBwcmludGYoIiVmICVmXG4iLCByZXN1bHRfMSwgcmVzdWx0XzIpOwp9CiAKaW50IG1haW4oKSB7CiAgcHJpbnQoMTAwMC4wZik7CiAgcHJpbnQoMTAwLjBmKTsKICBwcmludCgxMC4wZik7CiAgcHJpbnQoMS4wZik7CiAgcHJpbnQoMC4xZik7CiAgcHJpbnQoMC4wMWYpOwogIHJldHVybiAwOwp9