comparing implicit 0 with machine floats
- To: mathgroup at smc.vnet.net
- Subject: [mg71108] comparing implicit 0 with machine floats
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Wed, 8 Nov 2006 06:16:07 -0500 (EST)
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