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.