# 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.