about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--include/math.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/include/math.h b/include/math.h
index c4da4116..01428152 100644
--- a/include/math.h
+++ b/include/math.h
@@ -43,11 +43,16 @@ int __fpclassify(double);
 int __fpclassifyf(float);
 int __fpclassifyl(long double);
 
-union __float_repr { float __f; __uint32_t __i; };
-union __double_repr { double __f; __uint64_t __i; };
-
-#define __FLOAT_BITS(f) (((union __float_repr){ (float)(f) }).__i)
-#define __DOUBLE_BITS(f) (((union __double_repr){ (double)(f) }).__i)
+static __inline __uint32_t __FLOAT_BITS(float __f)
+{
+	union {float __f; __uint32_t __i;} __u = {__f};
+	return __u.__i;
+}
+static __inline __uint64_t __DOUBLE_BITS(double __f)
+{
+	union {double __f; __uint64_t __i;} __u = {__f};
+	return __u.__i;
+}
 
 #define fpclassify(x) ( \
 	sizeof(x) == sizeof(float) ? __fpclassifyf(x) : \