Averages/Simple moving average: Difference between revisions

Content added Content deleted
(→‎{{header|Java}}: consistent formatting)
Line 2,008: Line 2,008:


=={{header|Julia}}==
=={{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 the buffer.
# unlimited buffer
return (y::T) -> begin
<lang Julia>SMA(N, buffer = Number[]) =
push!(buffer, y)
x -> begin
push!(buffer, x)
return mean(buffer)
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) > lim 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>

{{out}}
<pre>test(1.0) = 1.0
test(2.0) = 1.5
test(3.0) = 2.0</pre>


=={{header|K}}==
=={{header|K}}==