about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--include/math.h4
-rw-r--r--src/math/significand.c7
-rw-r--r--src/math/significandf.c7
-rw-r--r--src/math/significandl.c7
4 files changed, 25 insertions, 0 deletions
diff --git a/include/math.h b/include/math.h
index 583dc3da..656f7868 100644
--- a/include/math.h
+++ b/include/math.h
@@ -400,6 +400,10 @@ long double exp10l(long double);
 double      pow10(double);
 float       pow10f(float);
 long double pow10l(long double);
+
+double      significand(double);
+float       significandf(float);
+long double significandl(long double);
 #endif
 
 #ifdef __cplusplus
diff --git a/src/math/significand.c b/src/math/significand.c
new file mode 100644
index 00000000..40d9aa9f
--- /dev/null
+++ b/src/math/significand.c
@@ -0,0 +1,7 @@
+#define _GNU_SOURCE
+#include <math.h>
+
+double significand(double x)
+{
+	return scalbn(x, -ilogb(x));
+}
diff --git a/src/math/significandf.c b/src/math/significandf.c
new file mode 100644
index 00000000..8a697e1a
--- /dev/null
+++ b/src/math/significandf.c
@@ -0,0 +1,7 @@
+#define _GNU_SOURCE
+#include <math.h>
+
+float significandf(float x)
+{
+	return scalbnf(x, -ilogbf(x));
+}
diff --git a/src/math/significandl.c b/src/math/significandl.c
new file mode 100644
index 00000000..c1d68cd7
--- /dev/null
+++ b/src/math/significandl.c
@@ -0,0 +1,7 @@
+#define _GNU_SOURCE
+#include <math.h>
+
+long double significandl(long double x)
+{
+	return scalbnl(x, -ilogbl(x));
+}