RE: [PHP] Math Weirdness
| From: | Ford, Mike | Date: | Tue, 15 Jul 2008 15:52:20 +0000 |
| Subject: | RE: [PHP] Math Weirdness | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-276843@lists.php.net to get a copy of this message | ||
On 15 July 2008 14:33, tedd advised:
> At 11:24 AM +0100 7/15/08, Ford, Mike wrote:
>> On 14 July 2008 20:47, tedd advised:
>>
>> > Round-off errors normally don't enter into things unless your
doing
>> > multiplication and division operations. At that point,
> what you get
>>> back from the operation is an approximation and not the actual
>>> number.
>>
>> Bull! Nearly all computer floating point numbers are approximations
>> because of being held in binary rather than decimal. Any number with
a
>> (decimal) fractional part that doesn't end with the digit 5 is
>> necessarily an approximation, and that's only half the story. So as
soon
>> as you involve numbers like 0.1 or 0.2, you've already got minor
>> inaccuracies which will propagate through any kind of arithmetic --
it's
>> just worse with multiplication or division because these tend to
result
>> in inaccuracy in more significant digits!
>>
>> Bottom line: a floating point value should *always* be treated with
an
>> appropriate degree of suspicion.
>>
>> Cheers!
>>
>> Mike
>
> Mike:
>
> No reason to be rude.
>
> I said:
>
> "Round-off errors normally don't enter into things unless your doing
> multiplication and division operations."
>
> And that is not "Bull" -- it's true. You can add and subtract all the
> floating point numbers (the one's we are talking about here) you want
> without any rounding errors whatsoever.
Sorry, I do apologise if I came over too strongly -- there was no
intention to offend.
However, you really can't dismiss the effects of round-off errors on
addition and subtraction as lightly as that. It's simply not true that
approximations only occur at the point of doing multiplication and
division -- there *are* approximations involved in addition and
subtraction, and it is necessary to be aware that this is the case -- as
Jay proved, 0.1+0.2 is hardly ever exactly 0.3. In this sort of case, it
may well be that an appropriate degree of suspicion is simply to round
to 2 decimal places at every stage, or compare the absolute difference
to .001, but nonetheless one has to *know* that this is necessary.
Ummm -- sorry, better </rant>, now!!!
Cheers!
Mike
--
Mike Ford, Electronic Information Developer,
C507, Leeds Metropolitan University, Civic Quarter Campus,
Woodhouse Lane, LEEDS, LS1 3HE, United Kingdom
Email: m.ford@leedsmet.ac.uk
Tel: +44 113 812 4730
To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm