From 146fcae6286115d8503a49a7885c9b491f128bb2 Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Wed, 12 Jul 2023 12:57:19 -0700 Subject: [PATCH] Another possible site of floating point error --- tile.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tile.cpp b/tile.cpp index 899d339b..ce403393 100644 --- a/tile.cpp +++ b/tile.cpp @@ -2290,12 +2290,12 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch // (which Douglas-Peucker simplification would keep anyway, // if its search weren't being split up by polygon side). - double far = 0; + long long far = 0; size_t which = i; for (size_t k = i + 1; k < j - 1; k++) { - double xd = sf.geometry[k].x - sf.geometry[i].x; - double yd = sf.geometry[k].y - sf.geometry[i].y; - double d = xd * xd + yd * yd; + long long xd = sf.geometry[k].x - sf.geometry[i].x; + long long yd = sf.geometry[k].y - sf.geometry[i].y; + long long d = xd * xd + yd * yd; if (d > far) { far = d; which = k; @@ -2310,14 +2310,14 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch // would keep next. far = 0; - double which2 = i; + size_t which2 = i; for (size_t k = i + 1; k < j - 1; k++) { - double xd = sf.geometry[k].x - sf.geometry[i].x; - double yd = sf.geometry[k].y - sf.geometry[i].y; - double xd2 = sf.geometry[k].x - sf.geometry[which].x; - double yd2 = sf.geometry[k].y - sf.geometry[which].y; - double d = xd * xd + yd * yd + xd2 * xd2 + yd2 * yd2; + long long xd = sf.geometry[k].x - sf.geometry[i].x; + long long yd = sf.geometry[k].y - sf.geometry[i].y; + long long xd2 = sf.geometry[k].x - sf.geometry[which].x; + long long yd2 = sf.geometry[k].y - sf.geometry[which].y; + long long d = xd * xd + yd * yd + xd2 * xd2 + yd2 * yd2; if (d > far) { far = d; which2 = k;