Cumulative standard deviation: Difference between revisions

Content added Content deleted
(Added Erlang)
Line 820:
1.399708424447531
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}}==