Unbias a random generator: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Raku}}: .perl -> .raku) |
|||
Line 203: | Line 203: | ||
bias 5: 19.760% vs 49.650% |
bias 5: 19.760% vs 49.650% |
||
bias 6: 16.740% vs 50.030%</pre> |
bias 6: 16.740% vs 50.030%</pre> |
||
=={{header|C++}}== |
|||
{{trans|C#}} |
|||
<lang cpp>#include <iostream> |
|||
#include <random> |
|||
std::default_random_engine generator; |
|||
bool biased(int n) { |
|||
std::uniform_int_distribution<int> distribution(1, n); |
|||
return distribution(generator) == 1; |
|||
} |
|||
bool unbiased(int n) { |
|||
bool flip1, flip2; |
|||
/* Flip twice, and check if the values are the same. |
|||
* If so, flip again. Otherwise, return the value of the first flip. */ |
|||
do { |
|||
flip1 = biased(n); |
|||
flip2 = biased(n); |
|||
} while (flip1 == flip2); |
|||
return flip1; |
|||
} |
|||
int main() { |
|||
for (size_t n = 3; n <= 6; n++) { |
|||
int biasedZero = 0; |
|||
int biasedOne = 0; |
|||
int unbiasedZero = 0; |
|||
int unbiasedOne = 0; |
|||
for (size_t i = 0; i < 100000; i++) { |
|||
if (biased(n)) { |
|||
biasedOne++; |
|||
} else { |
|||
biasedZero++; |
|||
} |
|||
if (unbiased(n)) { |
|||
unbiasedOne++; |
|||
} else { |
|||
unbiasedZero++; |
|||
} |
|||
} |
|||
std::cout << "(N = " << n << ")\n"; |
|||
std::cout << "Biased:\n"; |
|||
std::cout << " 0 = " << biasedZero << "; " << biasedZero / 1000.0 << "%\n"; |
|||
std::cout << " 1 = " << biasedOne << "; " << biasedOne / 1000.0 << "%\n"; |
|||
std::cout << "Unbiased:\n"; |
|||
std::cout << " 0 = " << unbiasedZero << "; " << unbiasedZero / 1000.0 << "%\n"; |
|||
std::cout << " 1 = " << unbiasedOne << "; " << unbiasedOne / 1000.0 << "%\n"; |
|||
std::cout << '\n'; |
|||
} |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre>(N = 3) |
|||
Biased: |
|||
0 = 66614; 66.614% |
|||
1 = 33386; 33.386% |
|||
Unbiased: |
|||
0 = 49965; 49.965% |
|||
1 = 50035; 50.035% |
|||
(N = 4) |
|||
Biased: |
|||
0 = 75032; 75.032% |
|||
1 = 24968; 24.968% |
|||
Unbiased: |
|||
0 = 50030; 50.03% |
|||
1 = 49970; 49.97% |
|||
(N = 5) |
|||
Biased: |
|||
0 = 80178; 80.178% |
|||
1 = 19822; 19.822% |
|||
Unbiased: |
|||
0 = 49878; 49.878% |
|||
1 = 50122; 50.122% |
|||
(N = 6) |
|||
Biased: |
|||
0 = 83494; 83.494% |
|||
1 = 16506; 16.506% |
|||
Unbiased: |
|||
0 = 50085; 50.085% |
|||
1 = 49915; 49.915%</pre> |
|||
=={{header|C sharp}}== |
=={{header|C sharp}}== |
||
<lang |
<lang csharp>using System; |
||
namespace Unbias |
namespace Unbias |