Parcourir la source

fix incorrect long double parameters on arm (and other future ports)

this was the cause of crashes in printf when attempting to print
floating point values.
Rich Felker il y a 13 ans
Parent
commit
089aeb08a0
2 fichiers modifiés avec 22 ajouts et 10 suppressions
  1. 10 10
      arch/arm/bits/float.h
  2. 12 0
      src/stdlib/frexpl.c

+ 10 - 10
arch/arm/bits/float.h

@@ -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

+ 12 - 0
src/stdlib/frexpl.c

@@ -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