diff --git a/.gitignore b/.gitignore index c452655148..c3a2738cfc 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,10 @@ js-*.h Build64/ Build32/ +Debug64/ +Debug32/ +Release64/ +Release32/ WindowsLibraries Makefile diff --git a/arangod/Aql/Functions.cpp b/arangod/Aql/Functions.cpp index 16472d1849..652ac787d1 100644 --- a/arangod/Aql/Functions.cpp +++ b/arangod/Aql/Functions.cpp @@ -4134,6 +4134,8 @@ AqlValue Functions::Percentile (triagens::aql::Query* query, return AqlValue(new Json(values[0])); } + TRI_ASSERT(l > 1); + if (useInterpolation) { double idx = p * (l + 1) / 100; double pos = floor(idx); @@ -4142,15 +4144,22 @@ AqlValue Functions::Percentile (triagens::aql::Query* query, return AqlValue(new Json(values[l - 1])); } + if (pos <= 0) { + return AqlValue(new Json(Json::Null)); + } + double delta = idx - pos; - return AqlValue(new Json(delta * (values[pos] - values[pos - 1]) + values[pos - 1])); + return AqlValue(new Json(delta * (values[static_cast(pos)] - values[static_cast(pos) - 1]) + values[static_cast(pos) - 1])); } double idx = p * l / 100; double pos = ceil(idx); if (pos >= l) { return AqlValue(new Json(values[l - 1])); } - return AqlValue(new Json(values[pos - 1])); + if (pos <= 0) { + return AqlValue(new Json(Json::Null)); + } + return AqlValue(new Json(values[static_cast(pos) - 1])); } ////////////////////////////////////////////////////////////////////////////////