       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 + Sqrt - Sqrt[4 + 2*Sqrt] == 2.

False

No problem here. Now let's make a small change

In:=
Sqrt + Sqrt - Sqrt[5 + 2*Sqrt] == 2.

Out=

Sqrt + Sqrt - Sqrt[5 + 2*Sqrt] == 2.

In fact the expression on the LHS  is exactly 0:

In:=
RootReduce[Sqrt+Sqrt-Sqrt[5+2*Sqrt]]

Out=

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:=
Sqrt + Sqrt - Sqrt[5 + 2*Sqrt] == N[10^3]

Out=
Sqrt + Sqrt - Sqrt[5 + 2*Sqrt] == 1000.

yet if the number of the left hand side is altered, however slightly,
the comparison will be made:

Sqrt + Sqrt - 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

• Prev by Date: Re: Evaluating integral with varying upper limit?
• Next by Date: Re: building a list containing elements f(i,j)
• Previous by thread: Re: Advanced nonlinear integro-differential equation
• Next by thread: Re: comparing implicit 0 with machine floats