aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-06-14 09:09:10 +0000
committerArne H Juul <arnej@yahooinc.com>2022-06-14 09:10:17 +0000
commitf1735f0e42ef46ec6317e80281480aec6c2eb7e8 (patch)
tree19b3eb130dd8ef2a51734848de7918e7db183c1e /searchlib
parente0e3ff465fcec5bb6a7253da2cd6df82f9701066 (diff)
handle NaN as a special case
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/expression/resultnodes.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/searchlib/src/vespa/searchlib/expression/resultnodes.cpp b/searchlib/src/vespa/searchlib/expression/resultnodes.cpp
index 14dfb24d802..a8e73b925b0 100644
--- a/searchlib/src/vespa/searchlib/expression/resultnodes.cpp
+++ b/searchlib/src/vespa/searchlib/expression/resultnodes.cpp
@@ -60,7 +60,14 @@ ResultDeserializer & ResultNode::onDeserializeResult(ResultDeserializer & is)
return is;
}
-int64_t FloatResultNode::onGetInteger(size_t index) const { (void) index; return static_cast<int64_t>(std::round(_value)); }
+int64_t FloatResultNode::onGetInteger(size_t ) const {
+ if (std::isnan(_value)) {
+ return std::numeric_limits<int64_t>::min();
+ } else {
+ return static_cast<int64_t>(std::round(_value));
+ }
+}
+
double FloatResultNode::onGetFloat(size_t index) const { (void) index; return _value; }
void FloatResultNode::add(const ResultNode & b) { _value += b.getFloat(); }
void FloatResultNode::negate() { _value = - _value; }