Rax real type is denoted by the `&`

symbol. Rax stores
real numbers as 64-bit floating point numbers. As you probably know,
only a finite number of the real numbers can be represented exactly in
the floating point format. Therefore, in languages such as C, comparing
two floating point values can yield unexpected results. To alleviate
this problem, Rax has a concept of *epsilon*. Real
values, whose absolute difference is smaller that the epsilon are
considered equal by Rax. The default value of epsilon
is `1e-6`

or `0.000001`

. You can
change the value of epsilon by using the `%epsilon`

meta instruction. For example, to change epsilon
to `1e-10`

, use:

%epsilon 1.0e-10;

The following operators are defined on the `&`

type:

**Table 3.3. Operators defined on &**

Operator name | Syntax | Explanation |
---|---|---|

Arithmetic operators | ||

Assignment | ` a := b ` | |

Addition | ` a + b ` | |

Subtraction | ` a - b ` | |

Unary plus | ` +a ` | |

Unary minus | ` -a ` | |

Magnitude value | ` #a ` | |

Unary ceiling | ` :/a ` | Returns the smaller integer greater or equal to a. |

Unary floor | ` :\a ` | Returns the greatest integer smaller or equal to a. |

Multiplication | ` a * b ` | |

Division | ` a / b ` | |

Modulo | ` a % b ` | |

Power | ` a ** b ` | |

Binary floor | ` a :\ b ` | Returns the smallest multiple of b greater than or equal
to a. For example: `7 :\ 3 == 6` |

Binary ceiling | ` a :/ b ` | Returns the greatest multiple of b smaller than or equal
to a. For example: `7 :/ 3 == 9` |

Comparison operators | ||
---|---|---|

Equal to | ` a == b ` | |

Not equal to | ` a != b ` | |

Greater than | ` a > b ` | |

Less than | ` a < b ` | |

Greater than or equal to | ` a >= b ` | |

Less than or equal to | ` a <= b ` |