#include #include "libm.h" int ilogbf(float x) { union fshape u = {x}; int e = u.bits>>23 & 0xff; if (!e) { u.bits <<= 9; if (u.bits == 0) return FP_ILOGB0; /* subnormal x */ for (e = -0x7f; u.bits < (uint32_t)1<<31; e--, u.bits<<=1); return e; } if (e == 0xff) return u.bits<<9 ? FP_ILOGBNAN : INT_MAX; return e - 0x7f; }