This commit is contained in:
Will Charczuk 2016-07-27 12:34:15 -07:00
parent 4f381fa4dc
commit 6533e951e7
8 changed files with 309 additions and 16 deletions

View file

@ -2,6 +2,7 @@ package chart
import (
"fmt"
"math"
"strings"
)
@ -200,6 +201,40 @@ func (rb *RingBuffer) String() string {
return strings.Join(values, " <= ")
}
// Average returns the float average of the values in the buffer.
func (rb *RingBuffer) Average() float64 {
var accum float64
rb.Each(func(v interface{}) {
if typed, isTyped := v.(float64); isTyped {
accum += typed
}
})
return accum / float64(rb.Len())
}
// Variance computes the variance of the buffer.
func (rb *RingBuffer) Variance() float64 {
if rb.Len() == 0 {
return 0
}
var variance float64
m := rb.Average()
rb.Each(func(v interface{}) {
if n, isTyped := v.(float64); isTyped {
variance += (float64(n) - m) * (float64(n) - m)
}
})
return variance / float64(rb.Len())
}
// StdDev returns the standard deviation.
func (rb *RingBuffer) StdDev() float64 {
return math.Pow(rb.Variance(), 0.5)
}
func arrayClear(source []interface{}, index, length int) {
for x := 0; x < length; x++ {
absoluteIndex := x + index