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.