1*c9945492SAndroid Build Coastguard Worker #include <math.h> 2*c9945492SAndroid Build Coastguard Worker #include <stdint.h> 3*c9945492SAndroid Build Coastguard Worker hypotf(float x,float y)4*c9945492SAndroid Build Coastguard Workerfloat hypotf(float x, float y) 5*c9945492SAndroid Build Coastguard Worker { 6*c9945492SAndroid Build Coastguard Worker union {float f; uint32_t i;} ux = {x}, uy = {y}, ut; 7*c9945492SAndroid Build Coastguard Worker float_t z; 8*c9945492SAndroid Build Coastguard Worker 9*c9945492SAndroid Build Coastguard Worker ux.i &= -1U>>1; 10*c9945492SAndroid Build Coastguard Worker uy.i &= -1U>>1; 11*c9945492SAndroid Build Coastguard Worker if (ux.i < uy.i) { 12*c9945492SAndroid Build Coastguard Worker ut = ux; 13*c9945492SAndroid Build Coastguard Worker ux = uy; 14*c9945492SAndroid Build Coastguard Worker uy = ut; 15*c9945492SAndroid Build Coastguard Worker } 16*c9945492SAndroid Build Coastguard Worker 17*c9945492SAndroid Build Coastguard Worker x = ux.f; 18*c9945492SAndroid Build Coastguard Worker y = uy.f; 19*c9945492SAndroid Build Coastguard Worker if (uy.i == 0xff<<23) 20*c9945492SAndroid Build Coastguard Worker return y; 21*c9945492SAndroid Build Coastguard Worker if (ux.i >= 0xff<<23 || uy.i == 0 || ux.i - uy.i >= 25<<23) 22*c9945492SAndroid Build Coastguard Worker return x + y; 23*c9945492SAndroid Build Coastguard Worker 24*c9945492SAndroid Build Coastguard Worker z = 1; 25*c9945492SAndroid Build Coastguard Worker if (ux.i >= (0x7f+60)<<23) { 26*c9945492SAndroid Build Coastguard Worker z = 0x1p90f; 27*c9945492SAndroid Build Coastguard Worker x *= 0x1p-90f; 28*c9945492SAndroid Build Coastguard Worker y *= 0x1p-90f; 29*c9945492SAndroid Build Coastguard Worker } else if (uy.i < (0x7f-60)<<23) { 30*c9945492SAndroid Build Coastguard Worker z = 0x1p-90f; 31*c9945492SAndroid Build Coastguard Worker x *= 0x1p90f; 32*c9945492SAndroid Build Coastguard Worker y *= 0x1p90f; 33*c9945492SAndroid Build Coastguard Worker } 34*c9945492SAndroid Build Coastguard Worker return z*sqrtf((double)x*x + (double)y*y); 35*c9945492SAndroid Build Coastguard Worker } 36