Index: tools/skpdiff/SkPMetric.cpp |
diff --git a/tools/skpdiff/SkPMetric.cpp b/tools/skpdiff/SkPMetric.cpp |
index beba4974b770aefaeba6b7a2280de01b7c665517..47880ac2916d372fc1eaf46f6fa175eec8b2dc71 100644 |
--- a/tools/skpdiff/SkPMetric.cpp |
+++ b/tools/skpdiff/SkPMetric.cpp |
@@ -1,4 +1,5 @@ |
#include <cmath> |
+#include <math.h> |
#include "SkBitmap.h" |
#include "skpdiff_util.h" |
@@ -159,10 +160,12 @@ static bool bitmap_to_cielab(const SkBitmap* bitmap, ImageLAB* outImageLAB) { |
static float contrast_sensitivity(float cyclesPerDegree, float luminance) { |
float a = 440.0f * powf(1.0f + 0.7f / luminance, -0.2f); |
float b = 0.3f * powf(1.0f + 100.0f / luminance, 0.15f); |
- return a * |
- cyclesPerDegree * |
- expf(-b * cyclesPerDegree) * |
- sqrtf(1.0f + 0.06f * expf(b * cyclesPerDegree)); |
+ float exp = expf(-b * cyclesPerDegree); |
+ float root = sqrtf(1.0f + 0.06f * expf(b * cyclesPerDegree)); |
+ if (!std::isfinite(exp) || !std::isfinite(root)) { |
+ return 0; |
+ } |
+ return a * cyclesPerDegree * exp * root; |
} |
#if 0 |