root/src/system/libroot/posix/musl/math/floorf.c
#include "libm.h"

float floorf(float x)
{
        union {float f; uint32_t i;} u = {x};
        int e = (int)(u.i >> 23 & 0xff) - 0x7f;
        uint32_t m;

        if (e >= 23)
                return x;
        if (e >= 0) {
                m = 0x007fffff >> e;
                if ((u.i & m) == 0)
                        return x;
                FORCE_EVAL(x + 0x1p120f);
                if (u.i >> 31)
                        u.i += m;
                u.i &= ~m;
        } else {
                FORCE_EVAL(x + 0x1p120f);
                if (u.i >> 31 == 0)
                        u.i = 0;
                else if (u.i << 1)
                        u.f = -1.0;
        }
        return u.f;
}