Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

RE: Re: Re: MemberQ

  • To: mathgroup at smc.vnet.net
  • Subject: [mg68695] RE: [mg68677] Re: [mg68655] Re: MemberQ
  • From: "Erickson Paul-CPTP18" <Paul.Erickson at Motorola.com>
  • Date: Thu, 17 Aug 2006 04:17:53 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Do you find that any stranger than the following?

In[7]:=
2 == 2.00000000000000000001 
Out[7]=
True

If you don't want Mathematica to make assumptions on your behalf, then
you have to tell it exactly what you do want, as in:

In[9]:=
2 == 2.00000000000000000001``50
Out[9]=
False (* as in the exact number 2 isn't equal to the very accurate
number close to 2 *)
In[12]:=
2. == 2.00000000000000000001``50
Out[12]=
True (* But the real number 2. with limited accuracy is close enough to
the very accurate number close to 2 *)
In[13]:=
2``50 == 2.00000000000000000001``50 (* where two very accurate close
number aren't equal *)
Out[13]=
False
In[10]:=
2 // FullForm
Out[10]//FullForm=
2
In[11]:=
2.00000000000000000001``50// FullForm
Out[11]//FullForm=
2.00000000000000000001`50.30102999566398

So in general, it appears that Mathematica tries to call two numbers
equal if they are close compared the accuracy of the less accurate
number. Some of the postings would indicate that Mathematica doesn't
always succeed in this wrt MemberQ and it would appear that it may be
machine dependant. Still seems best to just avoid the problem or deal
explicitly with it.

As to an earlier question about 2/10 vs 1/5, I think Mathematica is
don't exactly what it says it should in that it simplifies the rational
2/10 to 1/5 as the two rational fraction are equivalent. This is
illustrated by:

In[15]:=
2/10 === 1/5
Out[15]=
True
In[16]:=
2/10 //FullForm
Out[16]//FullForm=
Rational[1,5]

Now it's reasonable that someone may want a set of rationals with a
common denominator (perhaps because it is easier to look at, perhaps
other reasons), but it would seem that this operation is appropriate
most of the time and the burden of extra effort in the other cases is
acceptable.

Paul

-----Original Message-----
From: leigh pascoe [mailto:leigh at cephb.fr] 
To: mathgroup at smc.vnet.net
Subject: [mg68695] [mg68677] Re: [mg68655] Re: MemberQ

Peter Pein wrote:
> leigh pascoe schrieb:
> ...
>   
>> While we are talking about MemberQ, what about the following
behavior?
>> In[15]:=Range[0,1,1/10]
>>              MemberQ[Range[0,1,1/10],2/10]
>>
>> Out[15]=\!\({0, 1\/10, 1\/5, 3\/10, 2\/5, 1\/2, 3\/5, 7\/10, 4\/5, 
>> 9\/10, 1}\)
>>
>> Out[16]=True
>>
>> Is the above result correct given that 2/10 doesn't appear in the 
>> list produced by the range statement??
>>     
>
> Mathematica automagically cancels 2/10.
>
>   
>> On the other hand 0.5 can be
>> represented exactly as a binary number, but 
>> In[29]:=MemberQ[Range[0,1,1/10],.5]
>>
>> Out[29]=False
>>
>>     
>
> 1/2 has head Rational, 0.5 has got head _Real. So they must not be the
same.
>
>   
>> LP
>>
>>     
>
> I wrote a (very) small package:
>
> http://people.freenet.de/Peter_Berlin/Mathe/NMemberQ/NMemberQ.m
> and
> http://people.freenet.de/Peter_Berlin/Mathe/NMemberQ/NMemberQ.nb
>
> Feel free to add the function NMemberQ to your own collection of
utilities.
>
> Cheers,
>    Peter
>
>
>
>   
Dear Peter,

Thanks for your reply. Bruce Colletti was the original poster of this
topic and will probably be interested in your function NMemberQ[]. As
others have pointed out the use of MemberQ to compare fixed precision
(Real) and Rational numbers produces unpredictable (machine and version
dependent) results. My main point was that any such comparison should
produce an error or warning that the comparison is not reliable, rather
than True or False.

It still strikes me as strange that

In[8]:=.7//FullForm
            Range[0.,1.,.1][[8]]//FullForm
            MemberQ[Range[0.,1.,.1],.7]

Out[8]//FullForm=0.7`

Out[9]//FullForm=0.7000000000000001`

Out[10]=True

returns True for two numbers that Ma tells me are different.

Leigh


  • Prev by Date: Re: too many special linear matrices
  • Next by Date: Memory leak - Table & Export
  • Previous by thread: Re: Re: MemberQ
  • Next by thread: How to get the output of Minimize function in x = a format