Browse Source

make lrint and llrint functions work without fenv support

nsz 13 years ago
parent
commit
65db00983f
6 changed files with 16 additions and 6 deletions
  1. 1 1
      src/math/llrint.c
  2. 1 1
      src/math/llrintf.c
  3. 6 1
      src/math/llrintl.c
  4. 1 1
      src/math/lrint.c
  5. 1 1
      src/math/lrintf.c
  6. 6 1
      src/math/lrintl.c

+ 1 - 1
src/math/llrint.c

@@ -1,6 +1,6 @@
 #include <math.h>
 
-/* assumes LLONG_MAX > 2^53, see comments in lrint.c */
+/* uses LLONG_MAX > 2^53, see comments in lrint.c */
 
 long long llrint(double x)
 {

+ 1 - 1
src/math/llrintf.c

@@ -1,6 +1,6 @@
 #include <math.h>
 
-/* assumes LLONG_MAX > 2^24, see comments in lrint.c */
+/* uses LLONG_MAX > 2^24, see comments in lrint.c */
 
 long long llrintf(float x)
 {

+ 6 - 1
src/math/llrintl.c

@@ -8,7 +8,7 @@ long long llrintl(long double x)
 {
 	return llrint(x);
 }
-#else
+#elif defined(FE_INEXACT)
 /*
 see comments in lrint.c
 
@@ -27,4 +27,9 @@ long long llrintl(long double x)
 	/* conversion */
 	return x;
 }
+#else
+long long llrintl(long double x)
+{
+	return rintl(x);
+}
 #endif

+ 1 - 1
src/math/lrint.c

@@ -25,7 +25,7 @@ otherwise LONG_MAX and LONG_MIN can be represented exactly
 as a double.
 */
 
-#if LONG_MAX < 1U<<53
+#if LONG_MAX < 1U<<53 && defined(FE_INEXACT)
 long lrint(double x)
 {
 	int e;

+ 1 - 1
src/math/lrintf.c

@@ -1,6 +1,6 @@
 #include <math.h>
 
-/* assumes LONG_MAX > 2^24, see comments in lrint.c */
+/* uses LONG_MAX > 2^24, see comments in lrint.c */
 
 long lrintf(float x)
 {

+ 6 - 1
src/math/lrintl.c

@@ -8,7 +8,7 @@ long lrintl(long double x)
 {
 	return lrint(x);
 }
-#else
+#elif defined(FE_INEXACT)
 /*
 see comments in lrint.c
 
@@ -27,4 +27,9 @@ long lrintl(long double x)
 	/* conversion */
 	return x;
 }
+#else
+long lrintl(long double x)
+{
+	return rintl(x);
+}
 #endif