# Number

A mathematical concept used to count, measure and do other maths stuff.

## Declaration

The `Number` type is implemented as `double`. Here's how to declare a number:

``````a = 5              # number declaration (immutable)
b: Number = 5      # same effect, with type-checking
c: Number = a      # initiating from entry value, also 5
d = 43.14          # with decimals
``````

To declare a mutable entry, prepend it with the tilde operator:

``````~ a = 6  # mutable number entry
a += 1   # adds 1 to 'a', yields 7
``````

## Operating numbers

Numbers accept quite a few operations:

• `==` equal
• `!=` not equal
• `+` plus
• `-` minus
• `*` multiply
• `/` divide
• `%` modulus
• `**` power
• `<` less
• `<=` less or equal
• `>` more
• `>=` more or equal
• `&` logical AND
• `|` logical OR

### Caveats

For logical operations and flow control, keep in mind that zero is falsy and non-zero is truthy.

For equality operators, although `0` and `null` are evaluated as falsy, in FatScript they are not the same:

``````0 == null  # false
``````

## Precision

Although the arithmetic precision of a `IEEE 754 double` is higher, `fry` employs rounding tricks to improve human readability when printing long decimal sequences of nines or zeros as text. Additionally, it uses an epsilon of `1.0e-06` for 'equality' comparisons between numbers.

In 99.999% of use cases, this approach provides both more convenient comparisons and more natural-looking numbers:

``````# Equality epsilon
x = 1.0e-06
x: Number = 0.000001

# Smaller differences are treated as the "same" number by comparison
x == 0.0000015
Boolean: true  # the 0.0000005 difference is ignored
``````

Floating-point numbers aren't distributed evenly on the number line. They are dense around 0, and as the magnitude increases, the 'delta' between two expressible values increases:

``````_____________________________________0_____________________________________
+inf  |      |     |    |   |  |  | ||| |  |  |   |    |     |      |  -inf
``````

the biggest contiguous integer is 9,007,199,254,740,992 or 2^53

You can still have much larger numbers, around 10^308, which is:

``````100000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
``````

Bear in mind that if you add 1 to 10^308, no matter how many times you do it, it will always result in the same value! You need to add at least something near 10^293 in a single operation for it to be considered, as the numbers need to be of similar orders of magnitude.