diff options
Diffstat (limited to 'src/math/frexpf.c')
| -rw-r--r-- | src/math/frexpf.c | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/src/math/frexpf.c b/src/math/frexpf.c new file mode 100644 index 00000000..07870975 --- /dev/null +++ b/src/math/frexpf.c @@ -0,0 +1,23 @@ +#include <math.h> +#include <stdint.h> + +float frexpf(float x, int *e) +{ +	union { float f; uint32_t i; } y = { x }; +	int ee = y.i>>23 & 0xff; + +	if (!ee) { +		if (x) { +			x = frexpf(x*0x1p64, e); +			*e -= 64; +		} else *e = 0; +		return x; +	} else if (ee == 0xff) { +		return x; +	} + +	*e = ee - 0x7e; +	y.i &= 0x807ffffful; +	y.i |= 0x3f000000ul; +	return y.f; +}  | 
