]> granicus.if.org Git - check/commitdiff
Add definitions for isnan, isinf and isfinite, in case they are missing
authorbel2125 <bel2125@gmail.com>
Sun, 27 Aug 2017 21:42:34 +0000 (23:42 +0200)
committerbel2125 <bel2125@gmail.com>
Sun, 27 Aug 2017 21:42:34 +0000 (23:42 +0200)
tests/check_check_sub.c

index c446f387e6471502590739cdfa2d798041824b4f..ef0393bc8f2defab4b528fdb08365c368c38223a 100644 (file)
@@ -37,6 +37,40 @@ double NAN;
 #if !defined(INFINITY)
 double INFINITY;
 #endif
+#if !defined(isnan)
+int isnan(double d) {
+#ifdef _MSC_VER
+       unsigned __int64 *p = &d, m = 0x7FF0000000000000;
+#else
+       unsigned long long *p = &d, m = 0x7FF0000000000000;
+#endif
+       if ((*p & m) != m) return 0; /* finite */
+       *p &= 0x000FFFFFFFFFFFFF; /* mask exponent and sign */
+       return *p != 0;
+}
+#endif
+#if !defined(isinf)
+int isinf(double d) {
+#ifdef _MSC_VER
+       unsigned __int64 *p = &d, m = 0x7FF0000000000000;
+#else
+       unsigned long long *p = &d, m = 0x7FF0000000000000;
+#endif
+       *p &= 0x000FFFFFFFFFFFFF; /* mask exponent and sign */
+       return *p == 0;
+}
+#endif
+#if !defined(isfinite)
+int isfinite(double d) {
+#ifdef _MSC_VER
+       unsigned __int64 *p = &d, m = 0x7FF0000000000000;
+#else
+       unsigned long long *p = &d, m = 0x7FF0000000000000;
+#endif
+       return (*p & m) != m;
+}
+#endif
+
 
 START_TEST(test_lno)
 {