2.2. Comparing Floating-Point Numbers
Problem
You want to check whether two floating-point numbers are equal.
Solution
Use a small delta value, and check if the numbers are equal within that delta:
$delta = 0.00001; $a = 1.00000001; $b = 1.00000000; if (abs($a - $b) < $delta) { /* $a and $b are equal */ }
Discussion
Floating-point numbers are represented in binary form with only a finite number of bits for the mantissa and the exponent. You get overflows when you exceed those bits. As a result, sometimes PHP (and other languages, too) don’t believe two equal numbers are actually equal because they may differ toward the very end.
To avoid this problem, instead of checking if $a == $b
, make sure the first number is within a very small
amount ($delta
) of the second one. The size of
your delta should be the smallest amount of difference you care about
between two numbers. Then use abs( )
to get the
absolute value of the difference.
See Also
Recipe 2.4 for information on rounding floating-point numbers; documentation on floating-point numbers in PHP at http://www.php.net/language.types.float.
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.