Re: Re: Accuracy and Precision
- To: mathgroup at smc.vnet.net
- Subject: [mg36949] Re: [mg36933] Re: Accuracy and Precision
- From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
- Date: Thu, 3 Oct 2002 00:16:26 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
The last part of my message you are quoting was completely wrong, as was pointed out by Allan Hayes. Mathematica does not track precision of machine arithmetic computations. In order for Mathematica to give reliable information about the precision of a computation you have to explicitly set the precision of all the numerical quantities. Your own example at the bottom simply shows you have not understood the evaluation mechanism of Mathematica. What you are doing is this: In[1]:= a = SetAccuracy[77617., Infinity]; b = SetAccuracy[33096., Infinity]; At this point you have converted a and be to have the following exact values: In[3]:= a Out[3]= 77617 In[4]:= b Out[4]= 33096 Next you evaluate: f = SetAccuracy[333.75*b^6 + a^2*(11*a^2*b^2 - b^6 - 121*b^4 - 2) + 5.5*b^8 + a/(2*b), Infinity] but this is a two step process (which is what you seem not to have grasped). First Mathematica computes: In[5]:= 333.75*b^6 + a^2*(11*a^2*b^2 - b^6 - 121*b^4 - 2) + 5.5*b^8 + a/(2*b) Out[5]= 1.1805916207174113*^21 Now, because there were machine floats in the formula (333.75 and 5.5 ) the whole expression was computed using machine arithmetic without keeping track of precision. The answer is therefore completely inacurate. Mathematica returns the purely formal accuracy: In[6]:= Accuracy[%] Out[6]= -5 But the second part of your evaluation tells it to take this inaccurate answer and convert it to an exact number. In[7]:= SetAccuracy[%%, Infinity] Out[7]= 1180591620717411303424 In[8]:= Accuracy[%] Out[8]= Infinity But of course doing this is meaningless, after converting an inexact answer to an exact number does not make it a an exact answer! Of course had you evaluated f before you assigned the values to a and b you would not have encountered the problem because no machine reals would have appeared in the computation. ALternatively you might have used: f = SetAccuracy[333.75, Infinity]*b^6 + a^2*(11*a^2*b^2 - b^6 - 121*b^4 - 2) + SetAccuracy[5.5, Infinity]*b^8 + a/(2*b) Andrzej Kozlowski Yokohama, Japan http://www.mimuw.edu.pl/~akoz/ http://platon.c.u-tokyo.ac.jp/andrzej/ On Wednesday, October 2, 2002, at 04:32 PM, Peter Kosta wrote: > Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp> wrote in message > news:<anbofj$e7u$1 at smc.vnet.net>... >> It seems clear to me that what Allan and what you mean by "succeeds" >> here refer to quite different things and your objection is therefore >> beside the point. There are obviously two ways in which one can >> interpret the original posting. The first interpretation, which Allan >> and myself adopted, was that the question concerned purely the >> computational mechanism of Mathematica. Or, to put it in other words, >> it was "why are the results of these two computations not the same?". >> In this sense "success" means no more than making Mathematica return >> the same answer using the two different routes the original poster >> used. >> You on the other hand choose to assume that the posting shows that its >> author does not understand not just the mechanism of significance >> arithmetic used by Mathematica but also computations with inexact >> numbers in general. I do not think this is necessarily the correct >> assumption. I also don't see that Mathematica is doing anything wrong. >> After all, one can always check the accuracy of your answer: >> >> In[1]:= >> a = 77617.; b = 33096.; >> >> In[2]:= >> f := 333.75*b^6 + a^2*(11*a^2*b^2 - b^6 - 121*b^4 - 2) + >> 5.5*b^8 + a/(2*b) >> >> In[3]:= >> f >> >> Out[3]= >> -1.1805916207174113*^21 >> >> In[4]:= >> Accuracy[%] >> >> Out[4]= >> -5 >> >> which tells you that it can't be very reliable. What more do you >> demand? >> > > As you are dealing here only with machine-precision numbers, your > argument is valid. From the manual 3.1.6: > > "When you do calculations with arbitrary-precision numbers, as > discussed in the previous section, Mathematica always keeps track of > the precision of your results, and gives only those digits which are > known to be correct, given the precision of your input. When you do > calculations with machine-precision numbers, however, Mathematica > always gives you a machine-¡Áprecision result, whether or not all the > digits in the result can, in fact, be determined to be correct on the > basis of your input. " > > In practice, to rely on a numerical result, you ALWAYS have to check > its accuracy. How reliable is Accuracy anyway? > > In[1]:= > a = SetAccuracy[77617., Infinity]; > b = SetAccuracy[33096., Infinity]; > > In[3]:= > f = SetAccuracy[333.75*b^6 + > a^2*(11*a^2*b^2 - b^6 - 121*b^4 - 2) + 5.5*b^8 + > a/(2*b), Infinity] > > Out[3]= > 1180591620717411303424 > > In[4]:= > Accuracy[f] > > Out[4]= > Infinity > > We got completely wrong result with Infinite accuracy. In conclusion, > one can not rely on Accuracy. Checking numerical results in > Mathematica sounds like a tough task.:-) > > --PK > >> Andrzej >> >> >> Andrzej Kozlowski >> Yokohama, Japan >> http://www.mimuw.edu.pl/~akoz/ >> http://platon.c.u-tokyo.ac.jp/andrzej/ >> > [...] > >>> > > >