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 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_____________________________________
+infinity    |     |    |   |  |  | ||| |  |  |   |    |     |    -infinity

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. To discreetly handle numbers exceeding 2^53, consider using the HugeInt type.

Also, the infinity keyword provides a clear, unambiguous representation of values that soar into the realms beyond the largest expressible numbers, approaching the theoretical infinity.

See also

results matching ""

    No results matching ""