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