diff --git a/common/StatusVector.cpp b/common/StatusVector.cpp index a0af404a..112d60d5 100644 --- a/common/StatusVector.cpp +++ b/common/StatusVector.cpp @@ -25,11 +25,23 @@ void StatusVector::AddElement(uint32_t id, float val) { if (id >= content.size()) { content.resize(id + 1, NAN); } + + const float old_val = content[id]; + const bool had_old = std::isfinite(old_val); + content[id] = val; - sum += val; - count += 1; - mean = sum / count; + if (had_old) { + sum += static_cast(val) - static_cast(old_val); + } else { + sum += val; + count += 1; + } + + if (count > 0) + mean = static_cast(sum / static_cast(count)); + else + mean = NAN; } std::optional StatusVector::GetElement(uint32_t id) const {