From 931f6d0ad42a5a5809284ad991f811528c5d3803 Mon Sep 17 00:00:00 2001 From: Dennis Heimbigner Date: Tue, 4 Aug 2020 19:22:42 -0600 Subject: [PATCH] Define isnan and isinf for OSX --- include/isnan.h | 6 +++++- libdispatch/dutil.c | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/include/isnan.h b/include/isnan.h index cd72b3673..e5770190f 100644 --- a/include/isnan.h +++ b/include/isnan.h @@ -25,7 +25,10 @@ #ifndef INFINITYF #define INFINITYF ((float)INFINITY) #endif - +#ifdef __APPLE__ +extern int isinf(double x); +extern int isnan(double x); +#else #if ! (defined(isinf) || HAVE_DECL_ISINF) #define isinf(x) (DBL_MAX/((double)(x))==0.0) #endif /* !HAVE_DECL_ISINF */ @@ -35,5 +38,6 @@ #if ! (defined(isfinite) || HAVE_DECL_ISFINITE) #define isfinite(x) (!(isinf(x)||isnan(x))) #endif /* !HAVE_DECL_ISFINITE */ +#endif /*!APPLE*/ #endif /* _ISNAN_H */ diff --git a/libdispatch/dutil.c b/libdispatch/dutil.c index 79da2ad81..3e6126201 100644 --- a/libdispatch/dutil.c +++ b/libdispatch/dutil.c @@ -351,3 +351,22 @@ done: nclistfreeall(modelist); return found; } + +#ifdef __APPLE__ +int isinf(double x) +{ + union { unsigned long long u; double f; } ieee754; + ieee754.f = x; + return ( (unsigned)(ieee754.u >> 32) & 0x7fffffff ) == 0x7ff00000 && + ( (unsigned)ieee754.u == 0 ); +} + +int isnan(double x) +{ + union { unsigned long long u; double f; } ieee754; + ieee754.f = x; + return ( (unsigned)(ieee754.u >> 32) & 0x7fffffff ) + + ( (unsigned)ieee754.u != 0 ) > 0x7ff00000; +} + +#endif /*APPLE*/