Re: Weird results of "=="

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



That did the trick.

Thanks a million.

Brian

"Jasper Bryant-Greene" <jasper@xxxxxxxxxxxxxxxxxx> wrote in message
news:430B9867.2070000@xxxxxxxxxxxxxxxxxxxxx
> Brian P. O'Donnell wrote:
> > <?
> >
> > $a = 252.73;
> > $b = 252.73;
> > $c = 0;
> >
> > if ($a == ($b + $c))
> > {
> > // do the first thing
> > }
> > elseif ($a > ($b + $c))
> > {
> > // do the second thing
> > }
> > elseif ($a < ($b + $c))
> > {
> > // do the third thing
> > }
> >
> > ?>
> >
> > Each of the three variables is derived by some earlier calculation, but
for
> > testing purposes I have made sure that they end up being $a = $b and $c
= 0.
> > I have tested for three different values (of $a) and gotten all three
> > results. That is, once the first block has executed, once the second
block
> > and once the third block.
> >
> > Am I missing something really obvious here?
>
> This is an inherent problem with floating-point operations, especially
> comparison, and is not unique to PHP. Often numbers will be off by some
> miniscule amount, just enough to make them not equal.
>
> What I would do in this situation is create a function float_equals(),
> after deciding what delta is acceptable for your situation, like this:
>
> define('MAX_FLOAT_DELTA', 0.001); // Or whatever is acceptable for you
>
> function float_equals($a, $b) {
> return (abs($a - $b) <= MAX_FLOAT_DELTA);
> }
>
> Then use float_equals($x, $y) instead of $x == $y.
>
> Jasper

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux