Verify distribution uniformity/Naive: Difference between revisions

Added Erlang
(Added Erlang)
Line 362:
4 200016
5 200424</pre>
 
=={{header|Erlang}}==
<lang Erlang>
-module( verify_distribution_uniformity ).
 
-export( [naive/3] ).
 
naive( Generator, Times, Delta_percent ) ->
Dict = lists:foldl( fun update_counter/2, dict:new(), lists:duplicate(Times, Generator) ),
Values = [dict:fetch(X, Dict) || X <- dict:fetch_keys(Dict)],
Average = lists:sum( Values ) / dict:size( Dict ),
Delta = Average * (Delta_percent / 100),
Fun = fun(_Key, Value) -> erlang:abs(Value - Average) > Delta end,
Too_large_dict = dict:filter( Fun, Dict ),
return( dict:size(Too_large_dict), Too_large_dict, Average, Delta_percent ).
 
 
 
return( 0, _Too_large_dict, _Average, _Delta ) -> ok;
return( _N, Too_large_dict, Average, Delta ) ->
{error, {dict:to_list(Too_large_dict), failed_expected_average, Average, 'with_delta_%', Delta}}.
</lang>
 
{{out}}
Calling dice7() few times shows skewed distribution.
<pre>
61> Fun = fun() -> dice:dice7() end.
62> verify_distribution_uniformity:naive( Fun, 100000, 3).
ok
63> verify_distribution_uniformity:naive( Fun, 100, 3).
{error,{[{3,15},{6,15},{5,13},{1,20},{4,11},{7,12}],
failed_expected_average,14.285714285714286,'with_delta_%',
3}}
</pre>
 
=={{header|Euler Math Toolbox}}==
Anonymous user