Recently I engaged in a forum geek fight over the randomness of random number generators in computer programs. The discussion began over doubt that the percentages of certain outcomes within a video game were following probability.

Fortunately, the game’s code is open source and written in C++ (a language I happen to speak.) Ultimately, I was able to prove the code was constructed to deliver the correct probabilities. However, their next tactic was to cast doubt on the randomness of pseudorandom numbers in general. This discussion went on for days. Eventually I came to the conclusion that not only do computers perform a fantastic job of generating random numbers; perhaps they do a better job than our natural world.

The forum in that sparked this debate was SWGEmu.com. This community is attempting to reverse engineer the now defunct “Star Wars Galaxies” MMO video game. The game is playable, and open to anyone. Within the game there is a way to improve the stats of a weapon by “slicing” the item. When slicing a weapon there is a 50/50 chance that the slice will improve the speed stat or the damage stat of the weapon in question. The mechanics of the game make speed slices much less desirable than damage slices. It is perceived in the community that the negative “speed slice” occurs more often than the sought after “damage slice.”

In one of the numerous threads of people complaining about probabilities not going their way, someone produced a study that they conducted showing actual in game tests working out to be 50/50 for the issue in question.

Unfortunately, that was not enough to prove the game was using random numbers. Since the study was prior to the latest patch, it was then “theorized” that the latest patch broke the code. Therefore, the game was skewing the probability to the less desirable outcome.

It was at that time I pointed out the file which contains the code in question wasn’t even touched during the last patch. I was promptly told to prove it. Stronger, more insulting terms were used in place of the words “prove it”. After all, this discussion happened on an internet forum of a video, but that was the gist of the challenge.

Ultimately, I was able to list the code in question line by line, and showed that the probability was working as intended. I boiled the code down to functions in libraries native to the C++ language. Basically this means that if a problem existed, anything written in C++would have also had a problem with random number generation.

This is where my adversary casted doubt on computer generated numbers in general by stating they were pseudorandom. Pseudorandom number generation uses an algorithm to approximate a sequence of random numbers using a seed. A seed is simply a number or function result to start generating numbers from.

It is typically an intense process as a multitude of deterministic functions acts on the numbers to simulate a random distribution. This was the crux of their argument. Since predictable computer functions act upon the seed, then this is only an approximation of randomness.

While this is true, it sparked thoughts about randomness in the real world. Is it not the same concept? When I roll a six sided die we assume each side of the die has a 1 in 6 chance of landing face up. However are we sure that is the case?

There are also deterministic functions acting upon the die during its roll. There is the force of the rollers hand, the current in the air, the angle the die when it hits when it hits the felt, and countless other variables. If we were able to capture each of the variables acting upon the die during the roll we should theoretically be able to calculate how the die would land.

## Flipping a Coin isn’t Random

This cuts at the core of what we think of when we consider randomness, so I understand it’s difficult to believe. However, Persi Diaconis has shown that coin flipping isn’ random, and does in fact follow these biases. Diaconis, a magician turned Stanford University statistician, became curious of the random outcomes of coin flipping. He had a machine designed to flip a coin at various forces to test the randomness of coin flip outcomes.

His findings show that if you hit a coin with the same force in the same spot, it will land the same way every time. Furthermore, he has actually trained his thumb to flip a coin in such a manner that the outcome is heads 10 out of 10 times.

Evidently, flipping a coin is completely deterministic, and by extension so is dice rolling. Undoubtedly, there are more variables with a dice roll. However, if a coin flip is determined by measurable physics, dice rolling should be as well.

It appears as though the difference between random and pseudorandom is merely semantic. They both follow a deterministic process to produce a variable outcome. The only difference appears to be that one is natural, and the other is synthetic.

We shouldn’t reach as far as to say randomness doesn’t exist. However, we may want to adjust our definition of the word. Perhaps we should define it as an unpredictable outcome due to the number of events affecting said outcome.

Knowing that events previously assumed random can actually be predicted, has interesting implications for the future. As computing power and information capacity increase, will it be possible to predict events? Will we someday be able to apply real probabilities to courses of actions? Will a time horizon of a knowable future exist at some point?

The imagined possibilities are fascinating. What do you think about randomness and the possibility of applying probabilities to seemingly random outcomes? Share your ideas and thoughts in the comments.