PHP Random number generator (Need help)

In summary, the goal is to create a random number generator that outputs 1 and 2 (coin toss), and the more coin tosses are generated, the more uniform the pattern should be. However, as the number of tosses increases, the deviation also increases due to the nature of a one-dimensional random walk. The expected value of the absolute distance from the starting point is proportional to the square root of the number of tosses. Therefore, the ratio of the difference between the number of heads and tails to the total number of tosses will tend to 0 as the number of tosses increases.
  • #1
jscix
2
0
Okay, What I am trying to do is create a create a random number generator, that outputs 1 and 2 (coin toss)

From what I understand, the more coin tosses (the more times I generate a random 1 or 2) the more uniform the pattern should be.

EG: After generating a random 1-2 sequence, 1,000,000 times.. i should have 500,000 (1s) and 500,000 (2s).. am I wrong?

Anyway, I'm not sure what I am doing wrong but the more numbers I generate, the more deviation I am getting.

Here is how I'm doing this.. (I know I probably did this all wrong.. if so someone just tell me lols)

thank you in advance

(I know most won't know PHP but I am providing the code, in case)

OTHERWISE--

basically what I am doing is.

I have a value that begins at 0. ( $dev )

I generate a random 1 or 2

if it's one, I increment the value ($dev++)
if it's two, I decrement the value. ($dev--)

the final deviation, displayed after it finishes generating the numbers.



Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Coin Toss</title>
</head>
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
$submit = ($_POST['Toss']);
$values = ($_POST['select']);
if (!$submit) {
?>
<body><center>
<p align="center">Coin Toss Deviation
<form method="post" action="Cointoss.php">
<select name="select">
<option value="none">How many coin tosses?</option>
<option value="one">One Hundred</option>
<option value="two">One Thousand</option>
<option value="three">One-Hundred Thousand</option>
</select><input type="submit" name="Toss" value="Toss" />
</form>
</center></body></p>

</html>
<?php
}
else {

switch ($values) {

case "none":
die ("Select number of tosses");
break;
case "one":
$total = "100";
break;
case "two":
$total = "1000";
break;
case "three":
$total = "100000";
break;
}
$dev = 0;
$i = 0;

while ($i < $total) {

$cur = mt_rand(1,2);
//print $i . " = $cur <br>";

if ($cur == "1") {
$dev++;
$one++;
}

if ($cur == "2") {
$dev--;
$two++;
}
$i++;
}
unset ($submit);
print "<center>ones: $one <br>twos: $two<br>";
print "total: " . $dev . " point deviation.<br><br>";

print <<< DUH
Average deviation is 0 points<br>
The more tosses, the lower the deviation should be. (Closer to 0)<br>
DUH;

print "<a href=\"Cointoss.php\">Try Again!</a>";
}
?>
 
Last edited by a moderator:
Mathematics news on Phys.org
  • #2
The "uniformity" of your random numbers is geven by $dev/$count where $count is the number of numbers generated. This should tend to zero.
 
  • #3
Anyway, I'm not sure what I am doing wrong but the more numbers I generate, the more deviation I am getting.

No that's exactly what you should expect. What you're looking at is a one dimensional random walk, the expected value of the absolute distance from the starting point is proportional to [tex]\sqrt{n}[/tex]

See: http://en.wikipedia.org/wiki/Random_walk
 
Last edited:
  • #4
After 1000000 tosses you certainly should not have 500000 heads and 500000 tails! That is the most likely outcome but there are so many different outcomes that the probability of getting that particular result is vanishingly small (it is 10000000C5000002-1000000).

Nor should you expect the difference between the number of heads and tails to go to 0 as you increase the number of tosses. As uart said, that difference will actually increase, as [itex]\sqrt{n}[/itex], as n increases. What goes to 0 (by the "law of large numbers") is that difference as a ratio of the number of tosses: (difference between number of heads and tails)/n. Since the difference increases as [itex]\sqrt{n}[/itex], that ratio decreases as [itex]\sqrt{n}/n= 1/\sqrt{n}[/itex].
 

FAQ: PHP Random number generator (Need help)

What is a random number generator in PHP?

A random number generator in PHP is a built-in function that generates a pseudo-random number based on a given seed value. It is used to generate random data for applications such as games, simulations, and statistical analysis.

How do I use the random number generator in PHP?

To use the random number generator in PHP, you can use the rand() or mt_rand() function. These functions take in a minimum and maximum value as parameters and return a random number within that range.

Can I generate a specific range of numbers with the PHP random number generator?

Yes, you can use the rand() or mt_rand() function to generate a specific range of numbers. Simply specify the minimum and maximum values as parameters to the function.

How can I ensure that the random numbers generated in PHP are truly random?

PHP uses a pseudo-random number generator, which means that the numbers generated are not truly random but appear to be random. To improve the randomness of the generated numbers, you can use the random_int() function, which uses a cryptographically secure random number generator.

Is it possible to generate a random number without any repeats using PHP?

Yes, it is possible to generate a random number without any repeats in PHP. You can use the shuffle() function to shuffle an array of numbers and then use the array_pop() function to get a random number from the shuffled array. This will ensure that each number is only used once.

Back
Top