Verify distribution uniformity/Naive: Difference between revisions
Content deleted Content added
Added Erlang |
|||
Line 362: | Line 362: | ||
4 200016 |
4 200016 |
||
5 200424</pre> |
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}}== |
=={{header|Euler Math Toolbox}}== |