aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-08-19 12:19:15 +0000
committerArne Juul <arnej@verizonmedia.com>2020-08-20 10:38:08 +0000
commit99f11e75e4cb34c8421bc6bf1534a573643ef6ac (patch)
treeae37fab4993e494e091a4ed582598b4172ba99b0 /searchsummary
parent3b436b2f9fac45c8e89a2a58022282e7622864b0 (diff)
keep default distance within representable range
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/positionsdfw.cpp10
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