Troubleshooting Data Types
The following is a list of common problems that can occur when working with intrinsic data types.
Floating-point expressions not comparing as equal
When you work with floating-point numbers (Real32, Real64, Real, and Real128), keep in mind that they are stored as binary fractions. This means they can hold an exact representation of a quantity only when it is a binary fraction (of the form k / (2 ^ n) where k and n are integers). For example, 0.5 = 1/2 and 0.1875 = 3/16, thus these represent precise values. In contrast, 0.3 = 3/10 and 0.15 = 3/20, thus these represent approximations.
As a consequence, you cannot rely on exact values resulting from floating-point operations. In particular, you cannot assume that any two given values will be considered equal, even if mathematically they should be.
To compare floating-point quantities, do the following:
- Determine an acceptable maximum tolerance for the given comparison such that any amount within this tolerance is considered equal.
- Place a Tol directly after the end of the comparison expression, and follow that with the chosen tolerance amount, which can be a numeric literal or constant defined by a Const statement.
For more information, see Tol Clause.