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

     1  #include "libm.h"
     2  
     3  float modff(float x, float *iptr)
     4  {
     5  	union {float f; uint32_t i;} u = {x};
     6  	uint32_t mask;
     7  	int e = (int)(u.i>>23 & 0xff) - 0x7f;
     8  
     9  	/* no fractional part */
    10  	if (e >= 23) {
    11  		*iptr = x;
    12  		if (e == 0x80 && u.i<<9 != 0) { /* nan */
    13  			return x;
    14  		}
    15  		u.i &= 0x80000000;
    16  		return u.f;
    17  	}
    18  	/* no integral part */
    19  	if (e < 0) {
    20  		u.i &= 0x80000000;
    21  		*iptr = u.f;
    22  		return x;
    23  	}
    24  
    25  	mask = 0x007fffff>>e;
    26  	if ((u.i & mask) == 0) {
    27  		*iptr = x;
    28  		u.i &= 0x80000000;
    29  		return u.f;
    30  	}
    31  	u.i &= ~mask;
    32  	*iptr = u.f;
    33  	return x - u.f;
    34  }