package com import "math" type Ema struct { Alpha float64 Val float64 } func NewEMA(alpha float64) *Ema { return &Ema{Alpha: alpha} } func (e *Ema) Update(val float64) float64 { if math.IsNaN(val) || math.IsInf(val, 0) { return math.NaN() } if e.Val == 0 { e.Val = val } else { e.Val = e.Val*(1-e.Alpha) + val*e.Alpha } return e.Val } func (e *Ema) Reset() { e.Val = 0 }