Cumulative standard deviation: Difference between revisions

Content added Content deleted
(Added Erlang)
Line 820: Line 820:
1.399708424447531
1.399708424447531
2.0"</lang>
2.0"</lang>

=={{header|Erlang}}==
<lang Erlang>
-module( standard_deviation ).

-export( [add_sample/2, create/0, destroy/1, get/1, task/0] ).

-compile({no_auto_import,[get/1]}).

add_sample( Pid, N ) -> Pid ! {add, N}.

create() -> erlang:spawn_link( fun() -> loop( [] ) end ).

destroy( Pid ) -> Pid ! stop.

get( Pid ) ->
Pid ! {get, erlang:self()},
receive
{get, Value, Pid} -> Value
end.

task() ->
Pid = create(),
[add_print(Pid, X) || X <- [2,4,4,4,5,5,7,9]],
destroy( Pid ).



add_print( Pid, N ) ->
add_sample( Pid, N ),
io:fwrite( "Standard deviation ~p when adding ~p~n", [get(Pid), N] ).

loop( Ns ) ->
receive
{add, N} -> loop( [N | Ns] );
{get, Pid} ->
Pid ! {get, loop_calculate( Ns ), erlang:self()},
loop( Ns );
stop -> ok
end.

loop_calculate( Ns ) ->
Average = loop_calculate_average( Ns ),
Differences = [math:pow(X - Average, 2) || X <- Ns],
math:sqrt( loop_calculate_average(Differences) ).

loop_calculate_average( Ns ) -> lists:sum( Ns ) / erlang:length( Ns ).
</lang>
{{out}}
<pre>
9> standard_deviation:task().
Standard deviation 0.0 when adding 2
Standard deviation 1.0 when adding 4
Standard deviation 0.9428090415820634 when adding 4
Standard deviation 0.8660254037844386 when adding 4
Standard deviation 0.9797958971132712 when adding 5
Standard deviation 1.0 when adding 5
Standard deviation 1.3997084244475302 when adding 7
Standard deviation 2.0 when adding 9
</pre>


=={{header|Factor}}==
=={{header|Factor}}==