Strange math behaviour... could someone explain this ?
Eric Chatonet
eric.chatonet at sosmartsoftware.com
Sat Oct 8 05:30:25 EDT 2005
Hi all,
set the numberformat to "0.00000"
put (36-34.2)*100 into temp
put temp & cr & trunc(temp) & cr & trunc(180)
Result:
180.00000
179.00000
180.00000
Difficult to name this a man's bug ;-)
Le 8 oct. 05 à 03:41, Richard Gaskin a écrit :
> Alex Tweedly wrote:
>
>> Lynch, Jonathan wrote:
>>
>>> But still...
>>>
>>> Answer trunc((36-34.2)*100) should return 180, not 179.
>>>
>> No it shouldn't.
>>
>>> I mean, the
>>> underlying code should work to return an accurate value.
>>>
>> It does.
>>
>>> Perhaps it is just a matter of opinion, but to me, if the
>>> software returns a wrong value in a calculation, it is a bug.
>>>
>>>
>> It's not a matter of opinion, and it's not a wrong answer - it's a
>> correct answer. The binary double precision representation of 34.2
>> is inexact, and hence the binary double precision representation
>> of 36-34.2 is similarly inexact - so instead of exactly 180, it's
>> about 1x2**-40 less than that.
>> And then when you use trunc() it does what you ask.
>> It's NOT a Rev bug - it's an artifact of double precision binary
>> arithmetic (or, if you like, an artifact of the IEEE format used
>> by Intel (and everyone else)).
>>
>
> One man's "artifact" is another man's "bug". :)
>
> The original poster never specified that it was a Rev bug, and
> you've shown that the anomaly lies outside of Rev.
>
> Computers are the servants of humans, not the other way around.
>
> In human logic, this:
>
> trunc((36-34.2)*100)
>
> ...is evaluated in three steps:
>
> 1. 36-34.2 = 1.8
> 2. 1.8 * 100 = 180
> 3. truncate 180 = 180
>
> Math is a human tool devised for the benefit of humans.
> Parentheses have a specific meaning which breaks down operations
> into an explicit order of operations.
>
> If a computer system is designed in such a way that it no longer
> serves its masters faithfully by honoring things like the explicit
> order of exectution, it's commonly called a "bug", and it's usually
> up to another human to come in an fix it.
>
> Whether the fault lies with Rev or the microprocessor, the anwer of
> 179 is logically incorrect. It may be understandable, but
> understanding why it's giving an incorrect answer doesn't change
> the answer. :)
>
> --
> Richard Gaskin
> Managing Editor, revJournal
Best Regards from Paris,
Eric Chatonet.
----------------------------------------------------------------
So Smart Software
For institutions, companies and associations
Built-to-order applications: management, multimedia, internet, etc.
Windows, Mac OS and Linux... With the French touch
Free plugins and tutorials on my website
----------------------------------------------------------------
Web site http://www.sosmartsoftware.com/
Email eric.chatonet at sosmartsoftware.com/
Phone 33 (0)1 43 31 77 62
Mobile 33 (0)6 20 74 50 86
----------------------------------------------------------------
More information about the use-livecode
mailing list