Re: inconsistency with Inequality testing and Floor
- To: mathgroup at smc.vnet.net
- Subject: [mg60127] Re: inconsistency with Inequality testing and Floor
- From: "Ray Koopman" <koopman at sfu.ca>
- Date: Sat, 3 Sep 2005 02:06:22 -0400 (EDT)
- References: <df944v$62b$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Bill Rowe wrote: > I've no idea as to why Mathematica was designed in this manner, but > generally when I am using machine precision numbers it is to model the real > world in some way. My knowledge (i.e., measured data) never has sufficient > precision to argue two numbers within 8 binary bits of each other are > distinct. So, I much prefer in these cases Mathematica treats them as equal. > > However, I can see where this behaviour would cause problems in other > applications. And for those applications, the solution is to use "===" > rather than "==", Not quite. "SameQ" will still give "True" for two machine-precision reals even though their least significant bits differ. In[1]:= Block[{x = 1.+#*$MachineEpsilon}, {(x-1)/$MachineEpsilon, Ceiling[x], x === 1., x > 1., x == 1.}]& /@ {1,2,64,65} Out[1]= {{ 1., 2, True, False, True }, { 2., 2, False, False, True }, {64., 2, False, False, True }, {65., 2, False, True, False}} In[2]:= Block[{y = 1.-#*$MachineEpsilon/2}, {(1-y)2/$MachineEpsilon, Floor[y], y === 1., y < 1., y == 1.}]& /@ {1,2,127,128} Out[2]= {{ 1., 0, True, False, True }, { 2., 0, False, False, True }, {127., 0, False, False, True }, {128., 0, False, True, False}}