Преглед на файлове

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 преди 13 години
родител
ревизия
089aeb08a0
променени са 2 файла, в които са добавени 22 реда и са изтрити 10 реда
  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