fix incorrect long double parameters on arm (and other future ports)
authorRich Felker <dalias@aerifal.cx>
Mon, 19 Sep 2011 20:59:10 +0000 (16:59 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 19 Sep 2011 20:59:10 +0000 (16:59 -0400)
this was the cause of crashes in printf when attempting to print
floating point values.

arch/arm/bits/float.h
src/stdlib/frexpl.c

index 044b516b70fc55d7b8e7f82ec5f6d146cc2d009c..75fdc9bc45637bd252e55ad81bdefa934cad5f50 100644 (file)
@@ -1,14 +1,14 @@
 #define FLT_ROUNDS 1
-#define FLT_EVAL_METHOD 2
+#define FLT_EVAL_METHOD 0
 
-#define LDBL_MIN     3.3621031431120935063e-4932L
-#define LDBL_MAX     1.1897314953572317650e+4932L
-#define LDBL_EPSILON 1.0842021724855044340e-19L
+#define LDBL_MIN 2.2250738585072014e-308
+#define LDBL_MAX 1.7976931348623157e+308
+#define LDBL_EPSILON 2.2204460492503131e-16
 
-#define LDBL_MANT_DIG 64
-#define LDBL_MIN_EXP (-16381)
-#define LDBL_MAX_EXP 16384
+#define LDBL_MANT_DIG 53
+#define LDBL_MIN_EXP (-1021)
+#define LDBL_MAX_EXP 1024
 
-#define LDBL_DIG 18
-#define LDBL_MIN_10_EXP (-4931)
-#define LDBL_MAX_10_EXP 4932
+#define LDBL_DIG 15
+#define LDBL_MIN_10_EXP (-307)
+#define LDBL_MAX_10_EXP 308
index ecfff0070cd59cf54acb5031c22df7aad81c2c8a..3472bf70506821e6220e45f86cd3bbfb08bd5e2a 100644 (file)
@@ -1,5 +1,8 @@
 #include <math.h>
 #include <inttypes.h>
+#include <float.h>
+
+#if LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384
 
 /* This version is for 80-bit little endian long double */
 
@@ -23,3 +26,12 @@ long double frexpl(long double x, int *e)
        y.hw[4] |= 0x3ffe;
        return y.ld;
 }
+
+#else
+
+long double frexpl(long double x, int *e)
+{
+       return frexp(x, e);
+}
+
+#endif