1#include "libm.h"
2
3float truncf(float x) {
4    union {
5        float f;
6        uint32_t i;
7    } u = {x};
8    int e = (int)(u.i >> 23 & 0xff) - 0x7f + 9;
9    uint32_t m;
10
11    if (e >= 23 + 9)
12        return x;
13    if (e < 9)
14        e = 1;
15    m = -1U >> e;
16    if ((u.i & m) == 0)
17        return x;
18    FORCE_EVAL(x + 0x1p120f);
19    u.i &= ~m;
20    return u.f;
21}
22