github.com/afumu/libc@v0.0.6/musl/src/math/floorf.c (about)

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