MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Beware of adding 0.0

  • To: mathgroup at smc.vnet.net
  • Subject: [mg50279] Re: [mg50245] Re: Beware of adding 0.0
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 24 Aug 2004 06:22:18 -0400 (EDT)
  • References: <cg4fcn$cf5$1@smc.vnet.net> <cg97i2$a62$1@smc.vnet.net> <200408231034.GAA14593@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

*This message was transferred with a trial version of CommuniGate(tm) Pro*
The main problem is that it is quite wrong to say (about p and q)

> Even
> though they are almost exactly the same numbers (only different in
> precision)

They are not almost exactly the same: they entirely different type of 
numbers and entirely different types of arithmetic is performed on 
them. Moreover, in this case more important than the difference in 
Precision is the difference in Accuracy:


Accuracy /@ {p, q}


{Infinity, 0.}

That's a pretty big difference! Moreover, q has accuracy zero, which 
means that no digits after the decimal points are known with certainty. 
Looking at the sine and the cosine you get:


Through[{Sin,Cos}[q]]

{0.,0.}

with accuracy:

Accuracy/@%

{0.,0.}

So all you know about Sin[q] and Cos[q] is that they are numbers of the 
form 0.something. Since tangent is defined as their ratio the answer 
ComplexInifinity is as good as any, in fact there is no way to tell 
what such a ratio should be at all.

There is no mystery here and  everything agrees with common sense, even 
if the the self-appointed spokesmen for "computational scientists" 
remains sceptical.

Andrzej Kozlowski






On 23 Aug 2004, at 19:34, paul wrote:

> Indeed a nice problem Professor!  Thank you for sharing it.  Would you 
> mind
> helping us understand something, why is it that when we give the 
> following
> input:
> In[69]:=
> p = 314159265358979323
> q = 314159265358979323.
> r = 314159265358979323.00000000000000000000;
> s = p + 0.00000000000000000000;
> {p, q, r, s}
> {N[Tan[p]], N[Tan[q]], N[Tan[r]], N[Tan[s]]}
>
> And get the following output:
>
> Out[69]=
> 314159265358979323
> Out[70]=
> \!\(3.14159265358979323`17.497149872694134*^17\)
> Out[73]=
> \!\({314159265358979323, 3.14159265358979323`17.497149872694134*^17,
> 3.14159265358979323`37.49714987269414*^17, 3.141592653589793`*^17}\)
> Out[74]=
> {1.60125, ComplexInfinity, -1.12979, 1.60125}
>
> Then, the output for Tan[p] and Tan[q] give two different answers?  
> Even
> though they are almost exactly the same numbers (only different in
> precision), If it can calculate the Tan[314159265358979323] then why 
> is it
> not able to give an approximate value for
> Tan[3.14159265358979323`17.497149872694134*^17], Also, if it calculates
> Tan[314159265358979323] to be 1.60125, then why does it give
> Tan[3.14159265358979323`37.49714987269414*^17] with such a severe 
> variation
> (-1.12979)?
>
> Thanks for your help,
>
> Regards,
>
>
> "Richard Fateman" <rfateman at sbcglobal.net> wrote in message
> news:cg97i2$a62$1 at smc.vnet.net...
>
>> Paul, since you are copying this from my posting to sci.math.symbolic
>> of August 19,2004, (yesterday) perhaps you should give me credit.
>> I took the example from my own paper, A Review of Mathematica,
>> which appeared in J. Symbolic Computation,(1992) and a version of 
>> which
>> is online. You might also read Mark Soufroniou's INRIA paper (1999?)
>> explaining why this behavior is apparently intentional, even if it is
>> hard to explain (shown by the responses you got).
>>
>> The idea that 0.0 should represent all numbers in [-1,1]* 
>> 2^{-precision}
>> is generally regarded with skepticism by computational scientists. 
>> Some
>> of the other consequences of this are discussed by Soufroniou and 
>> others.
>> RJF
>>
>>
>>
>> paul wrote:
>>> In Mathematica 5.0, I get a very strange result when I add 0.0 to a
> number,
>>> why is this?  See below:
>>>
>>> p = SetPrecision[314159265358979323, 25]
>>> q = SetPrecision[314159265358979323., 25]
>>> r = SetPrecision[314159265358979323.00000000000000000000, 25]
>>> s = SetPrecision[p + 0.0, 25]
>>> {p == q, q == r, r == s, r == p}
>>> {Tan[s], N[Tan[p]], Tan[q], Tan[r]}
>>>
>>>
>>> \!\(3.14159265358979323`25.*^17\)
>>> Out[47]=
>>> \!\(3.14159265358979323`25.*^17\)
>>> Out[48]=
>>> \!\(3.14159265358979323`25.*^17\)
>>> Out[49]=
>>> \!\(3.14159265358979328`25.*^17\)   *****NOTICE the 28 instead of 23 
>>> at
> the
>>> end, why does this happen? *******
>>> Out[50]=
>>> {True, True, False, True}
>>> Out[51]=
>>> {1.599808, -1.12979, -1.1297927, -1.1297927}
>>>
>>
>
>
>


  • Prev by Date: Re: Re: Re: Re: Re: Re: FindMinimum and the minimum-radius circle
  • Next by Date: Re: Re: Re: Re: Re: Re: FindMinimum and the minimum-radius circle
  • Previous by thread: Re: Re: Beware of adding 0.0
  • Next by thread: Comparison of Mathematica on Various Computers