diff --git a/include/core/SkScalar.h b/include/core/SkScalar.h
index f44d036..9c015e5 100644
--- a/include/core/SkScalar.h
+++ b/include/core/SkScalar.h
@@ -68,10 +68,22 @@
 
 /** Returns true if x is not NaN and not infinite
  */
-static inline bool SkScalarIsFinite(SkScalar x) { return sk_float_isfinite(x); }
+static inline bool SkScalarIsFinite(SkScalar x) {
+    // We rely on the following behavior of infinities and nans
+    // 0 * finite --> 0
+    // 0 * infinity --> NaN
+    // 0 * NaN --> NaN
+    SkScalar prod = x * 0;
+    // At this point, prod will either be NaN or 0
+    return !SkScalarIsNaN(prod);
+}
 
 static inline bool SkScalarsAreFinite(SkScalar a, SkScalar b) {
-    return sk_float_isfinite(a) && sk_float_isfinite(b);
+    SkScalar prod = 0;
+    prod *= a;
+    prod *= b;
+    // At this point, prod will either be NaN or 0
+    return !SkScalarIsNaN(prod);
 }
 
 static inline bool SkScalarsAreFinite(const SkScalar array[], int count) {
@@ -80,7 +92,7 @@
         prod *= array[i];
     }
     // At this point, prod will either be NaN or 0
-    return prod == 0;   // if prod is NaN, this check will return false
+    return !SkScalarIsNaN(prod);
 }
 
 /**
diff --git a/include/private/SkFloatBits.h b/include/private/SkFloatBits.h
index bae1542..2740a25 100644
--- a/include/private/SkFloatBits.h
+++ b/include/private/SkFloatBits.h
@@ -56,18 +56,6 @@
     return data.fFloat;
 }
 
-constexpr int32_t gFloatBits_exponent_mask = 0x7F800000;
-constexpr int32_t gFloatBits_matissa_mask  = 0x007FFFFF;
-
-static inline bool SkFloatBits_IsFinite(int32_t bits) {
-    return (bits & gFloatBits_exponent_mask) != gFloatBits_exponent_mask;
-}
-
-static inline bool SkFloatBits_IsInf(int32_t bits) {
-    return ((bits & gFloatBits_exponent_mask) == gFloatBits_exponent_mask) &&
-            (bits & gFloatBits_matissa_mask) == 0;
-}
-
 /** Return the float as a 2s compliment int. Just to be used to compare floats
     to each other or against positive float-bit-constants (like 0). This does
     not return the int equivalent of the float, just something cheaper for
diff --git a/include/private/SkFloatingPoint.h b/include/private/SkFloatingPoint.h
index e2f2133..a2e6ee5 100644
--- a/include/private/SkFloatingPoint.h
+++ b/include/private/SkFloatingPoint.h
@@ -12,7 +12,6 @@
 #include "SkTypes.h"
 #include "SkSafe_math.h"
 #include <float.h>
-#include <math.h>
 
 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1
     #include <xmmintrin.h>
@@ -65,17 +64,17 @@
     #define sk_float_log2(x)        log2f(x)
 #endif
 
-static inline bool sk_float_isfinite(float x) {
-    return SkFloatBits_IsFinite(SkFloat2Bits(x));
-}
-
-static inline bool sk_float_isinf(float x) {
-    return SkFloatBits_IsInf(SkFloat2Bits(x));
-}
-
-static inline bool sk_float_isnan(float x) {
-    return !(x == x);
-}
+#ifdef SK_BUILD_FOR_WIN
+    #define sk_float_isfinite(x)    _finite(x)
+    #define sk_float_isnan(x)       _isnan(x)
+    static inline int sk_float_isinf(float x) {
+        return x && (x + x == x);
+    }
+#else
+    #define sk_float_isfinite(x)    isfinite(x)
+    #define sk_float_isnan(x)       isnan(x)
+    #define sk_float_isinf(x)       isinf(x)
+#endif
 
 #define sk_double_isnan(a)          sk_float_isnan(a)
 
