Averages/Simple moving average: Difference between revisions

(→‎{{header|Java}}: consistent formatting)
Line 2,008:
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
A short version that buffers all numbers seen from the start.
The function wants specified the type of the data in the buffer and, if you want, the limit of the buffer.
<lang Julia>SMA(N) = let buffer = Number[]
<lang julia>function movingaverage(::Type{T} = Float64; lim::Integer = -1) where T<:Real
x -> (push!(buffer, x) ; mean(buffer[max(1,end-N+1):end]))
buffer = Vector{T}(0)
end</lang>
if lim == -1
A version with a buffer of size at most N. An initial value can be
provided # for theunlimited buffer.
return x(y::T) -> begin
<lang Julia>SMA(N, buffer = Number[]) =
push!(buffer, y)
x -> begin
return push!mean(buffer, x)
end
if length(buffer) == N+1 shift!(buffer) end
else
mean(buffer)
# limited size buffer
end</lang>
return (y) -> begin
{{Out}}
push!(buffer, y)
<pre>julia> test = SMA(3) ; test(1), test(2), test(3), test(4), test(5)
if length(buffer) ==> N+1lim shift!(buffer) end
(1.0,1.5,2.0,3.0,4.0)</pre>
return mean(buffer)
end
end
end
 
test = movingaverage()
@show test(1.0) # mean([1])
@show test(2.0) # mean([1, 2])
@show test(3.0) # mean([1, 2, 3])</lang>
 
{{Outout}}
<pre>test(1.0) = 1.0
test(2.0) = 1.5
test(3.0) = 2.0</pre>
 
=={{header|K}}==
Anonymous user