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}}== |