Unbias a random generator: Difference between revisions

Content added Content deleted
(Add Nimrod)
(added Elixir)
Line 394: Line 394:
5: 19.958% 49.987%
5: 19.958% 49.987%
6: 16.660% 49.890%</pre>
6: 16.660% 49.890%</pre>

=={{header|Elixir}}==
<lang elixir>
defmodule Random do
def init() do
:random.seed(:erlang.now())
end
def randN(n) do
if Enum.member?(3..6, n) do
if :random.uniform(n) == 1, do: 1, else: 0
end
end
def unbiased(n) do
{x, y} = {randN(n), randN(n)}
if x != y, do: x, else: unbiased(n)
end
end

IO.puts "N biased unbiased"
Random.init()
for n <- 3..6 do
xs = for _ <- 1..10000, do: Random.randN(n)
ys = for _ <- 1..10000, do: Random.unbiased(n)
IO.puts "#{n} #{Enum.sum(xs) / Enum.count(xs)} #{Enum.sum(ys) / Enum.count(ys)}"
end
</lang>
Output:
<pre>
N biased unbiased
3 0.3356 0.5043
4 0.2523 0.4996
5 0.2027 0.5041
6 0.1647 0.4912
</pre>


=={{header|Euphoria}}==
=={{header|Euphoria}}==