#include #include float hypotf(float x, float y) { union {float f; uint32_t i;} ux = {x}, uy = {y}, ut; float_t z; ux.i &= -1U>>1; uy.i &= -1U>>1; if (ux.i < uy.i) { ut = ux; ux = uy; uy = ut; } x = ux.f; y = uy.f; if (uy.i == 0xff<<23) return y; if (ux.i >= 0xff<<23 || uy.i == 0 || ux.i - uy.i >= 25<<23) return x + y; z = 1; if (ux.i >= (0x7f+60)<<23) { z = 0x1p90f; x *= 0x1p-90f; y *= 0x1p-90f; } else if (uy.i < (0x7f-60)<<23) { z = 0x1p-90f; x *= 0x1p90f; y *= 0x1p90f; } return z*sqrtf((double)x*x + (double)y*y); }