Index: fusl/src/math/frexpf.c |
diff --git a/fusl/src/math/frexpf.c b/fusl/src/math/frexpf.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0787097527c22a4be256abb600b9a05061a2ec87 |
--- /dev/null |
+++ b/fusl/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; |
+} |