Re: MemberQ
- To: mathgroup at smc.vnet.net
- Subject: [mg68544] Re: MemberQ
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 9 Aug 2006 04:19:54 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <eb9pkt$t4j$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Bruce Colletti wrote: > Re Mathematica 5.2.0.0. > > Since 0.7 is in the set {0.0, 0.1, 0.2,..., 0.9, 1.0}, The above is only true to one decimal place. I am sure what you have in mind is 0.7 == 7/10; however this is not the case in computer sciences because of the way numbers are coded at the hardware level. 0.7 is a machine-precision number so anything, for example, from 0.66 to 0.74 will do it. > why does MemberQ[Range[0., 1., .1], .7] return False? 0.7 is a machine-precision number so anything, for example, from 0.66 to 0.74 will do it. Now MemberQ looks for strict equality since its a pattern matching function. What you must do is either using exact arithmetic MemberQ[Range[0, 1, 1/10], 7/10] --> True or arbitrary precision MemberQ[Range[0, 1.`20., 0.1`20.], 0.7`20.] --> True or machine precision but you must fix the precision anyway. Below, I typed in MemberQ[Range[0.`2, 1.`2, .1`2], .7`2]: look how the number two is represented in InputForm. MemberQ[Range[0, 1.`1.9999999999999998, 0.1`1.9999999999999998], 0.7`1.9999999999999991] --> True Section 3.1.4 "Numerical Precision" of the Mathematica Book might be of interest. http://documents.wolfram.com/mathematica/book/section-3.1.4 HTH, Jean-Marc