MCPcopy
hub / github.com/grafana/tempo / addWeigthedMean

Method addWeigthedMean

pkg/traceql/engine_metrics_average.go:259–273  ·  view source on GitHub ↗

It calculates the incremental weighted mean using kahan-neumaier summation and a delta approach. By adding incremental values we prevent overflow

(interval int, mean float64, weight float64)

Source from the content-addressed store, hash-verified

257// It calculates the incremental weighted mean using kahan-neumaier summation and a delta approach.
258// By adding incremental values we prevent overflow
259func (k *averageSeries) addWeigthedMean(interval int, mean float64, weight float64) {
260 currentMean := k.values[interval]
261 if math.IsNaN(currentMean.mean) && !math.IsNaN(mean) {
262 k.values[interval] = averageValue{mean: mean, weight: weight}
263 return
264 }
265
266 sumWeights := currentMean.weight + weight
267 meanDelta := ((mean - currentMean.mean) * weight) / sumWeights
268 meanDelta -= currentMean.compensation
269
270 currentMean.add(meanDelta)
271 currentMean.weight = sumWeights
272 k.values[interval] = currentMean
273}
274
275var (
276 _ SeriesAggregator = (*averageOverTimeSeriesAggregator)(nil)

Callers 1

CombineMethod · 0.80

Calls 1

addMethod · 0.45

Tested by

no test coverage detected