Quick actions

cmd+k|ctrl+k

Navigation

Languages

fast inverse square root (approximate)

Snippet info

Language

C

Visibility

public

Author

danielmg17

Created

2019-07-02T18:28:02Z

Updated

2019-07-02T19:17:42Z

#include <stdio.h>

float Q_sqrt(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;
}


// test
int main(void) {
    printf("%f",Q_sqrt(226.0f)); // real answer: ~0.06651901...
    return 0;
}
INFO