Re: Numerical accuracy/precision - this is a bug or
- To: mathgroup at smc.vnet.net
- Subject: [mg120265] Re: Numerical accuracy/precision - this is a bug or
- From: "Christoph Lhotka" <christoph.lhotka at univie.ac.at>
- Date: Fri, 15 Jul 2011 05:15:14 -0400 (EDT)
Dear Group!
I do not agree to arguments based on SetPrecision, since the function
modifies the numbers (it adds binary 0 to fill the missing binary digits
as stated in the documentation) it does not show us what a and b are. It
is
no suprise for me that in base 10 the numbers a and b are now different
(and SameQ qill return False).
If we want to see the actual form of a and b I would rather use FullForm:
a = 1.100000000000000000000000000;
b = 1.1;
FullForm/@{a,b}
{1.1000000000000000000000000000000000000000000000000000000001`27.041392685158225,1.1`}
As we can see the first number is accurate up to the 27th digit while the
second is accurate up to machine precision. Well but they are still
different!
First I was surprised that SameQ yields True but I guess that it has
something to do with Mathematica's principle to return results correct to
the lowest precision found in the expression.
So to my opinion Mathematica does the following: 1) first convert all
numbers to numbers of the lowest precision found in the expression, 2)
follow the usual evaluation chain. Am I correct? If so, SameQ yields True,
since up to machine precision both numbers are the same expression.
In another response to my post I learned that it is not a good idea to
overwrite the definition of Equal. As a conclusion I would implement the
following identity:
myEqual[a_,b__]:=And@@{SameQ@@Head/@{a,b},SameQ@@Precision/@{a,b},SameQ@@{a,b},Equal@@{a,b}}
a_\[TildeEqual]b__:=myEqual[a,b]
which also handles the issue with the comparison of different precision
numbers:
In[62]:= a\[TildeEqual]a
Out[62]= True
In[64]:= a\[TildeEqual]b
Out[64]= False
Of course the definition can be modified to your needs...
Best,
Christoph
On 15/07/2011 10:08, James Stein wrote:
> Richard, thanks for pointing this out.
> >From what you say, it seems that the documentation for SameQ is incorrect.
>
> On Thu, Jul 14, 2011 at 6:21 PM, Richard Fateman
> <fateman at eecs.berkeley.edu>wrote:
>
>> On 7/14/2011 6:22 AM, Christoph Lhotka wrote:
>>> Dear group!
>>>
>> ....
>>
>>> My question is: how dangerous is it to overwrite such a fundamental
>>> function as Equal?
>>>
>>> Best,
>>>
>>> Christoph
>>>
>> An excellent question. Anyone who runs Mathematica in serious
>> applications could try it
>> and report back.
>>
>> Unfortunately, SameQ doesn't operate the way I suspect you think it does.
>>
>> Consider a = 1.100000000000000000000000000; b=1.1
>>
>> SameQ[a,b] is True.
>>
>> Yet a and b are different. You can see this if you do
>> SetPrecision[a,100] and SetPrecision[b,100].
>>
>> 1.10000000000000000000000000000000000000117549435082228750796873653722\
>> 2245677818665556772087521508752
>>
>> 1.10000000000000008881784197001252323389053344726562500000000000000000\
>> 0000000000000000000000000000000
>>
>> RJF
>>
>>
>