Re: comparing implicit 0 with machine floats
- To: mathgroup at smc.vnet.net
- Subject: [mg71139] Re: [mg71108] comparing implicit 0 with machine floats
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Thu, 9 Nov 2006 03:37:57 -0500 (EST)
- Reply-to: hanlonr at cox.net
Using Simplify will force the comparison Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] == 2.//Simplify False Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] == N[10^3]//Simplify False Bob Hanlon ---- Andrzej Kozlowski <akoz at mimuw.edu.pl> wrote: > Consider the following: > > > Sqrt[2] + Sqrt[3] - Sqrt[4 + 2*Sqrt[6]] == 2. > > False > > No problem here. Now let's make a small change > > In[17]:= > Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] == 2. > > Out[17]= > > Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] == 2. > > In fact the expression on the LHS is exactly 0: > > In[19]:= > RootReduce[Sqrt[2]+Sqrt[3]-Sqrt[5+2*Sqrt[6]]] > > Out[19]= > > The curious thing is that if you try a comparison between a zero of > this kind and any machine float, however large, Mathematica 5.1 will > return the original input: > > In[20]:= > Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] == N[10^3] > > Out[20]= > Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] == 1000. > > yet if the number of the left hand side is altered, however slightly, > the comparison will be made: > > > Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6+1/10^20]] == 2. > > False > > This suggests that Mathematica actually did perform a computation of > the left hand side in the examples where it just returned the input > and having discovered that it could not determine if the LHS is an > exact zero decided "not to answer the question". But this seems quite > unreasonable; after all it is not being asked if the LHS is an exact > 0, or even an approximate 0, but if it is an approximate large number > like 1000., and this it certainly can decide. > > I believe this used to be handled differently (better?) in older > versions of Mathematica but I no longer have any installed to check. > > Andrzej Kozlowski >