Skip to main content
2 of 11
Clarify that computing determinism is not always the case
Robotnik
  • 39.7k
  • 49
  • 191
  • 322

Computers are deterministic1

In mathematics, computer science and physics, a deterministic system is a system in which no randomness is involved in the development of future states of the system. A deterministic model will thus always produce the same output from a given starting condition or initial state.
Deterministic Systems - Wikipedia

Think of a computer like a cook, who has been handed a recipe (a program) to bake a cake. Computers do not deviate from the instructions (input) in a program, meaning that each cake they bake (output) will be identical.


So how do programs (including games) implement randomness?

Kinda like this:

xkcd 221: Random Number
Comic #221: Random Number - xkcd

A mathematical formula is used to "fake" randomness. This is known as a Pseudorandom Number Generator (PRNG), often abbreviated to just Random Number Generator (RNG).

The problem is, being a mathematical formula - if you give it the same input value, you'll get the same output value. So we're left with a problem:

What is the initial starting value?

This is where the "seed" gets its name. It's a seed value, a number used to start the random number generator, so that it may generate future pseudo-random numbers.

In most games, the seed is determined automatically using a few tricks, like deriving a value from the system clock, or the number of frames generated before user input. But this is also why clock manipulation or frame-counting are popular tactics in speedrunning circles - because they can take the "randomness" out of certain actions, to guarantee a more perfect run.

In other games like Minecraft which relies heavily on randomness for it's world generation, they allow you to manually specify a seed to get the "same" world generation.


Math/Comp-Sci crash course:

Just for fun, let's look at a working example of a basic pseudorandom number generator:

Next_Value = (Multiplier * Current_Value + Increment) % Modulus

The Modulo % operator gives us the remainder after division by the Modulus, e.g if 10 / 8 = 1 r2, then 10 % 8 = 2. So let's set some values in the formula, and generate numbers between 1 and 100:

Next_Value = (7 * Current_Value + 5) % 101

We need to seed Current_Value with something, so let's do a seed of 1:

Current Value Formula Next Value
1 (Seed) (7 * 1 + 5) % 101 12
12 (7 * 12 + 5) % 101 89
89 (7 * 89 + 5) % 101 22
22 (7 * 22 + 5) % 101 58

and now, let's try a seed of 42

Current Value Formula Next Value
42 (Seed) (7 * 42 + 5) % 101 97
97 (7 * 97 + 5) % 101 78
78 (7 * 78 + 5) % 101 46
46 (7 * 46 + 5) % 101 24

As you can see, we're getting some "fake" random numbers, based off a seed value! Pretty cool, right?


1. This is true for most computing applications you'll encounter day-to-day. In specialised cases (such as high-security applications) computers can act as non-deterministic systems by utilizing True Random Number Generators (TRNGs). These devices measure unpredictable physical phenomena (such as thermal noise or radioactive decay) to generate data that is truly random and not based on a formula. Non-deterministic behaviour may also be observed from situations such as multi-core processing (race conditions), hardware faults, or Single-Event Upsets (SEUs) (i.e. cosmic rays flipping bits, etc)
Robotnik
  • 39.7k
  • 49
  • 191
  • 322