# Human Numbers vs Digital Numbers¶

Read time: 24 minutes (6200 words)

Now that you know how we store digital numbers in memory, what does this mean when we compare “normal” math to the math computers do?

The answer is subtle, but very important.

In one of your math courses, surely you were introduced to the concept of a
`number line`

. That is a line stretching out to infinity in the positive
direction, and to negative infinity in the negative direction. “Numbers”, as we
were trained to think of them back then, are just points along that line
somewhere.

Simple.

Mathematicians love this picture. They can talk for hours about how operations like addition, subtraction, and multiplication work. When they get to division, things get messy!

## Human Kinds of Numbers¶

In your math class you may have been introduced to several different kinds of “Human” numbers.

### Natural Numbers¶

- Symbol:

`Natural numbers`

are whole numbers, we use for “counting”. We may include
zero in this set of numbers. Another term for these numbers is `unsigned`

.
There are no “fractional” numbers in this set. These numbers fall at specific,
evenly spaced points on that “number line”, headed off toward `infinity`

Scene: Coffee shop

Ada: Infinity is hard to grasp!

Nick: Yeah, it is pretty far away!

Alan: If the Universe actually ends somewhere, what is beyond that?

Ada: I am getting a headache!

### Integers¶

- Symbol:

`Integer numbers`

are also a form of counting, but what does it mean to have
-5 sheep? I guess you rented some, and have to subtract that number from the
number you own! Again, these have no fractional part.

### Rational Numbers¶

- Symbol:

`Rational numbers`

represent numbers that can be expressed as the ratio of
two integers. That means a whole number divided by a whole number. A number
like 1/3 is `rational`

, even if we cannot write it down as a number with a
decimal point. (Too many digits needed to express it exactly!)

### Real Numbers¶

- Symbol:

`Real numbers`

are expressed using a decimal point. These numbers can have an
infinite number of digits on either side of the decimal point, and can be
either positive or negative. Potentially, every point on that number line can
be expressed as a `Real Number`

.

Every `rational number`

is also a `real number`

.

### Irrational Numbers¶

- Symbol:

`Irrational numbers`

are numbers that are not `Rational`

. Simple enough!
That means every other number *except* for those that are `rational`

on that
number line .

Every `irrational number`

is also a `real number`

.

### Imaginary Numbers¶

- Symbol:

Boy, if ever a number ought to be called `irrational`

, it is the number
representing the square root of -1! We all know that no such number exists.
However, in the world of mathematics, it turns out very handy to pretend that
such a number exists, and we call it `imaginary`

.

### Complex Numbers¶

If we combine two numbers, one `real`

, and one `imaginary`

, and plot them
on a graph, with the real numbers representing points along one axis, and
`imaginary`

numbers representing points along the other axis, we map out
something called the `complex plain`

. We write a `complex number`

as the sum
of a `real`

part, and an `imaginary`

part.

By the way, the number zero is both `real`

and `imaginary`

.

#### Euler’s Formulas¶

Using `complex numbers`

we are able to understand a lot about how electricity
works. This kind of math is a big part of the study of electronic devices that
make up our digital world.

I am reading a book on Euler’s Formula [Sti17]:

When this becomes this amazing formula:

How on Earth did he come up with that? The book lays it out.

```
Euler's formula is "the most remarkable formula in mathematics"
Richard Feynman
```

## Computer Numbers¶

Computer numbers are very different. For one thing, there is no way we can have an infinite number of them! We only have so many bits to encode them and land them in our memory. Infinity? That is not going to happen in a computer!

The easiest way to visualize digital numbers is simple to place specific marks on the number line. This works for both Integer numbers and Floating point numbers. Those spots mark places where our digital numbers coincide with human numbers. Any other human number simple cannot be represented in a machine, unless we come up with a different encoding scheme.

Furthermore there are boundary points beyond which any given number container (with some fixed number of bits) can’t handle bigger values. Beyond those barriers, we cannot store the values. If we need to process bigger numbers, we need to increase the size of our containers!

## Computer Math¶

Think about arithmetic operations using `integers`

. All operations except
division are well behaved. They always create integer results, and we can
represent those answers exactly with our machines, as long as we have enough
bits available.

When we deal with division, things get messy. If we want
to express the result of the division as an `integer`

number, we basically
take the nearest whole number `smaller`

(back toward zero) than the “correct”
human result. (One divided by two is one half, we just “know” that is right.
But in the computer world, there is no `integer`

number with that value. We
drop the fractional part leaving the `integer`

result: zero!

Warning

You might not believe how hard it is to get humans to understand that simple concept!

### Errors Accumulate¶

Humans write programs. They really want the results of their math operations to generate the “correct” answers. But machines can never be expected to be able to express every “correct result. They may easily be off.

If the machine was off on one calculation, than uses that number in further calculations, the errors can increase. (In some rare cases, the may actually improve, but we will ignore that).

The best we can do is find the best “digital number” closest to that human
“correct” number and accept that result. We may be “off” by some hopefully
small amount, but we *are* off in many cases! Furthermore, we can study how we
do our math and learn how to minimize these errors. That is precisely what I
did as a “Computational Fluid Dynamicist” years ago!

Note

There are classic examples of this kind of cumulative math errors resulting in totally wrong answers. If done wrong, your math can be very bad, done right, and things work as expected. I saw an example of this in college where we were “inverting” a matrix of whole numbers, and the “correct answer also was another matrix with whole numbers. However, our simple computer programs trying to get that “correct” answer produced gibberish. Scary, but we got the point.

There is an entire branch of mathematics that explores these issues. You will run into it at some point in your career: Discrete Math!