Floating Point Numbers

Floating point literals are local approximations to reals. Local means close to zero. Floats are dense near zero and lose precision far from it.

Type

We lift the main floating point type, double from C.

type double = "double";

It is a double precision floating point representation usually conformat to IEEE specifications.

Literals

Floating literals have two parts, a decimal number known as the mantissa, and a power of 10 known as the exponent.

12.34
12.34E-4

The mantissa must contain a decimal point with a digit on either side. The exponent is optional, and consists of the letter E or e followed by a small decimal integer literal, or a + sign or minus sign, and a small decimal integer literal.

If the exponent is present, the mantissa is multiplied by 10 raised to the power of the signed integer part exponent.

Operations

Floating numbers support negation with prefix -, addition with infix +, subtraction with infix -, multiplication with infix * and division with infix / as well as many other operations given by functions in the library.

It is also possible to perform comparisons, equality ==, inequality !=, less than <, less than or equal to <=, greater than > and greater than or equal to >=. However these comparisons reflect floating point arithmentic which only approximates real arithmetic. Do not be suprised if the formula

1.0 / 3.0 * 3.0 == 1.0

is false. To remedy this properly requires a deep knowledge of numerical analysis. Felix helps by providing the function abs which can be used like this:

abs ( 1.0 / 3.0 * 3.0 - 1.0) < 1.0e-3

to check the result is with about 3 decimal places of 1.0.

Summary: Double Comparisons

Operator Type Syntax Semantics
== double * double -> bool Infix Equality
!= double * double -> bool Infix Not Equal
<= double * double -> bool Infix Less or Equal
< double * double -> bool Infix Less
>= double * double -> bool Infix Greater or Equal
> double * double -> bool Infix Greater

Summary: Double Operations

Operator Type Syntax Semantics
+ double * double -> double Infix Addition
- double * double -> double Infix Subtraction
* double * double -> double Infix Multiplication
/ double * double -> double Infix Division
- double -> double Prefix Negation
neg double -> double Prefix Negation
abs double -> double Prefix Absolute Value

More Floats

Felix has more floating types. See the reference manual:

https://felix.readthedocs.io/en/latest/floats.html

for details.