Averages/Simple moving average: Difference between revisions

Content added Content deleted
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 1,721: Line 1,721:
import "fmt"
import "fmt"


func sma(n int) func(float64) float64 {
func sma(period int) func(float64) float64 {
var i int
s := make([]float64, 0, n)
i, sum, rn := 0, 0., 1/float64(n)
var sum float64
return func(x float64) float64 {
var storage = make([]float64, 0, period)

if len(s) < n {
return func(input float64) (avrg float64) {
sum += x
s = append(s, x)
if len(storage) < period {
return sum / float64(len(s))
sum += input
storage = append(storage, input)
}
}

s[i] = x
sum += input - storage[i]
i++
if i == n {
storage[i], i = input, (i+1)%period
avrg = sum / float64(len(storage))
i = 0

}
return
sum = 0
for _, x = range s {
sum += x
}
return sum * rn
}
}
}
}