43 lines
575 B
Plaintext
43 lines
575 B
Plaintext
def max 1000
|
|
|
|
Class MovingAverage
|
|
'==================
|
|
|
|
indexbase 1
|
|
double average,invperiod,mdata[max]
|
|
sys index,period
|
|
|
|
method Setup(double a,p)
|
|
sys i
|
|
Period=p
|
|
invPeriod=1/p
|
|
index=0
|
|
average=a
|
|
for i=1 to period
|
|
mdata[i]=a
|
|
next
|
|
end method
|
|
|
|
method Data(double v) as double
|
|
sys i
|
|
index++
|
|
if index>period then index=1 'recycle
|
|
i=index+1 'for oldest data
|
|
if i>period then i=1 'recycle
|
|
mdata[index]=v
|
|
average=average+invperiod*(v-mdata[i])
|
|
end method
|
|
|
|
end class
|
|
|
|
'TEST
|
|
'====
|
|
|
|
MovingAverage A
|
|
|
|
A.Setup 100,10 'initial value and period
|
|
|
|
A.data 50
|
|
'...
|
|
print A.average 'reult 95
|