diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-08-19 12:19:15 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-08-20 10:38:08 +0000 |
commit | 99f11e75e4cb34c8421bc6bf1534a573643ef6ac (patch) | |
tree | ae37fab4993e494e091a4ed582598b4172ba99b0 /searchsummary | |
parent | 3b436b2f9fac45c8e89a2a58022282e7622864b0 (diff) |
keep default distance within representable range
Diffstat (limited to 'searchsummary')
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp index 4fc2b1f4221..dfe1049bed9 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp @@ -58,7 +58,9 @@ uint64_t AbsDistanceDFW::findMinDistance(uint32_t docid, GetDocsumsState *state, const std::vector<const GeoLoc *> &locations) { - uint64_t absdist = std::numeric_limits<int64_t>::max(); + // ensure result fits in Java "int" + uint64_t absdist = std::numeric_limits<int32_t>::max(); + uint64_t sqdist = absdist*absdist; const auto& attribute = get_attribute(*state); for (auto location : locations) { int32_t docx = 0; @@ -70,12 +72,12 @@ AbsDistanceDFW::findMinDistance(uint32_t docid, GetDocsumsState *state, int64_t docxy(pos[i]); vespalib::geo::ZCurve::decode(docxy, &docx, &docy); uint64_t dist2 = location->sq_distance_to(GeoLoc::Point{docx, docy}); - if (dist2 < absdist) { - absdist = dist2; + if (dist2 < sqdist) { + sqdist = dist2; } } } - return (uint64_t) std::sqrt((double) absdist); + return (uint64_t) std::sqrt((double) sqdist); } void |