1 #include "libm.h"
2 
truncf(float x)3 float 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