Hello Group,
It seems people didn't fully grasp the inconsistency that I pointed to in my
earlier message with the same subject. I came across this problem when I
tried to make my RootSearch package (recent MathSource addition) capable of
finding roots to a an arbitrary precision. To allow that I had to make a
function similar to Ulp[x] in the NumericalMath`Microscope` package. Among
other things my version of Ulp can work with arbitrary precision numbers.
Unfortunately I can't make RootSearch work as well as I would like because
of the problem I demonstrate below.
First consider the next line which demonstrates that a StandardForm output
such as (0. x 10^-20) represents an arbitrary precision number that is more
or less zero.
In[1]:=
x=Exp[ N[Pi/3, 20] ];
x-x
Out[1]=
0. x 10^-20
Now suppose we want to find the arbitrary precision number that is slightly
larger than x, but as close as possible to x and still a different number.
What do I mean when I say "a different number"? Well if x and y are
different numbers their difference should not be zero. In the first case
below I view x and y as essentially the same number.
In[2]:=
y=x+SetPrecision[5.96*^-20, 30];
{y-x, y-x==0}
Out[4]=
{0. x 10^-20, True}
What about the next case. Here the StandardForm of (x-y) looks like zero,
but (x-y==0) returns False. Are x and y "different numbers"? Why does
(x-y) return False in the next line, but True in the slightly different case
above? I think when comparing numeric values (x-y==0) should return True
IF AND ONLY IF the StandardForm of (x-y) is zero. When I say "is zero",
that includes (0. x 10^-20) and similar output.
In[5]:=
y=x+SetPrecision[5.97*^-20, 30];
{y-x, y-x==0}
Out[6]
{0. x 10^-20, False}
--------
Regards,
Ted Ersek