]> granicus.if.org Git - jq/commitdiff
Improve jv_is_integer()
authorMark Feit <mfeit@internet2.edu>
Thu, 14 Mar 2019 19:07:35 +0000 (15:07 -0400)
committerNicolas Williams <nico@cryptonector.com>
Sun, 7 Apr 2019 19:33:36 +0000 (14:33 -0500)
src/jv.c

index 2427b009a99b80f8c6e9a8a448a3f874359aaf9d..2f87bab58a2a22d4b3ae75e1cae2ac727fddfaec 100644 (file)
--- a/src/jv.c
+++ b/src/jv.c
@@ -7,6 +7,7 @@
 #include <stdarg.h>
 #include <limits.h>
 #include <math.h>
+#include <float.h>
 
 #include "jv_alloc.h"
 #include "jv.h"
@@ -152,11 +153,11 @@ int jv_is_integer(jv j){
     return 0;
   }
   double x = jv_number_value(j);
-  if(x != x || x > INT_MAX || x < INT_MIN){
-    return 0;
-  }
 
-  return x == (int)x;
+  double ipart;
+  double fpart = modf(x, &ipart);
+
+  return fabs(fpart) < DBL_EPSILON;
 }
 
 /*