Next: Errors Accumulate, Previous: Many Numbers Cannot Be Represented Exactly, Up: Floating-Point Arithmetic Is Not Exact [Contents][Index]

Because the underlying representation can be a little bit off from the exact value, comparing floating-point values to see if they are exactly equal is generally a bad idea. Here is an example where it does not work like you would expect:

$gawk 'BEGIN { print (0.1 + 12.2 == 12.3) }'-| 0

The general wisdom when comparing floating-point values is to see if
they are within some small range of each other (called a *delta*,
or *tolerance*).
You have to decide how small a delta is important to you. Code to do
this looks something like the following:

delta = 0.00001 # for example difference = abs(a - b) # subtract the two values if (difference < delta) # all ok else # not ok

(We assume that you have a simple absolute value function named
`abs()`

defined elsewhere in your program.) If you write a
function to compare values with a delta, you should be sure
to use ‘`difference < abs(delta)`’ in case someone passes
in a negative delta value.