Jump to content

Averages/Simple moving average: Difference between revisions

→‎{{header|D}}: replaced incorrect version
(→‎{{header|D}}: replaced incorrect version)
Line 284:
 
=={{header|D}}==
<lang d>import std.stdio ;
This should work properly for any types that act like numerics.
<lang d>import std.stdio;
import std.string;
 
T delegate(T) Sma(T)(int period) {
class MovingAvg(T) {
T[] data = new T[]elements(period);
T drop, sum = intcast(T) window =0 5;
int index, filled, count ;
MovingAvg!(T) add(T input) {
 
elements ~= input;
foreach(ref e ; data) e = cast(T)0 ; // D initialize float returntype this;to NaN
 
}
T void setWindowsmaAcc(intT winv) {window = win;}
Tdrop getAvg()= {data[index] ;
data[index] = v if (!window) return 0;
index = (index + 1) % period T sum = 0;
sum += ( v - drop ) ;
int start = (elements.length-window<0?elements.length:elements.length-window);
if (startfilled =>= elements.lengthperiod) return 0;
count = period foreach(ele;elements[start..$]) {sum += ele;}
}else
return sum/(elements.length-start);
} count = ++filled ;
return 0sum / count;
}
 
return &smaAcc ;
}
 
 
intvoid main() {
double[]nums = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1];
auto mavgs3 = new MovingAvgSma!(double)(3) ;
auto s5 = foreachSma!(index,num;numsdouble)(5) {;
foreach(e double[]nums =; [1, 2, 3, 4, 5, 5, 4, 3, 2, 1];)
writefln("Average number %d is %s",index,toString(mavg.add(num).getAvg));
writefln("added %d , 3 period sma = %f , 5 period sma = %f", e, s3(e), s5(e)) ;
}
 
return 0;
}</lang>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.