Re: comparing implicit 0 with machine floats

*To*: mathgroup at smc.vnet.net*Subject*: [mg71137] Re: [mg71108] comparing implicit 0 with machine floats*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Thu, 9 Nov 2006 03:37:53 -0500 (EST)*References*: <11095316.1163039426494.JavaMail.root@eastrmwml01.mgt.cox.net>

Yes indeed, it does. This is rather curious because Simplify does not actually reduce Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] to 0 (since Simplify does not make use of RootReduce) one needs FullSimplify to do that. In[51]:= Simplify[Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]]] Out[51]= Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]] In[52]:= FullSimplify[Sqrt[2] + Sqrt[3] - Sqrt[5 + 2*Sqrt[6]]] Out[52]= 0 Andrzej Kozlowski On 9 Nov 2006, at 11:30, Bob Hanlon wrote: > 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 >> >