     Next: String comparison Up: Comparisons Previous: Comparisons   Contents   Index

### Numerical comparison

For a numerical comparison, available operators are
• >: greater than
• <: less than
• > =: greater than or equal to
• < =: less than or equal to
• = =: equal to
• ! =: not equal to
• < = >: returns -1, 0, or 1, depending on if the left argument is numerically less than, equal to, or greater than the right argument.
A couple of cautionary notes must be raised about specifying conditions involving equality of numbers. The first is to note that equality of numbers is tested with the == operator, and not a single =. This can be confusing: consider the snippet:
```my \$i = 22;
my \$j = 44;
if (\$i = \$j) {
print qq{\\$i and \\$j are equal\n};
}
```
which will report that \$i and \$j are equal. The reason for this is that, as a statement, the assignment \$i = \$j, which assigns the value of \$j to \$i, is true, and thus the enclosing statements are evaluated. The second cautionary note involves comparing numerical values themselves. Consider
```my \$i = 4/3;
my \$j = 4/3 + 3/2 - 1.5;
if (\$i == \$j) {
print qq{\\$i and \\$j are equal\n};
}
```
This will not print out that \$i and \$j are equal, even though mathematically we can show they are. The reason for this is that computers only store integers exactly (up to a maximum size); floating point numbers are stored only up to a certain accuracy, which then leads to round-off errors. If you wanted to compare two floating point numbers, it is generally a good idea to specify a tolerance to which you would consider them equal:
```my \$i = 4/3;
my \$j = 4/3 + 3/2 - 1.5;
my \$diff = abs(\$i - \$j);   # abs() takes the absolute value
my \$epsilon = 0.0000001;   # can also write this as 1e-7 [ 10^(-7) ]
if (\$diff < \$epsilon) {
print qq{\\$i and \\$j are close enough};
}
```     Next: String comparison Up: Comparisons Previous: Comparisons   Contents   Index