MathGroup Archive 2002

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

Search the Archive

Re: Accuracy and Precision

  • To: mathgroup at smc.vnet.net
  • Subject: [mg36939] Re: Accuracy and Precision
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Wed, 2 Oct 2002 03:33:35 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

If you don't wont error messages all you need to do is to set 
MinPrecision low enough:

In[1]:=
$MinPrecision = -3;
In[2]:=
k = $MachinePrecision;
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), k];
In[4]:=
a = 77617.; b = 33096.;
In[5]:=
a = SetAccuracy[a, k];
In[6]:=
b = SetAccuracy[b, k];
In[7]:=
f
Out[7]=
-5.517164009`-2.8311*^19
In[8]:=
Accuracy[f]
Out[8]=
-23
In[9]:=
Precision[f]
Out[9]=
-3

In any case the answer you get is meaningless.




On Wednesday, October 2, 2002, at 10:33 AM, DrBob wrote:

> I think I'd prefer that Mathematica gave me a clue -- without being
> asked explicitly in JUST the right way that only you know and had
> forgotten -- that there's a precision problem.
>
> Oddly enough, when you DO ask it nicely, you get error messages, but if
> you're not aware there's a problem, it lets you go on your merry way,
> working with noise.
>
> Bobby
>
> -----Original Message-----
> From: Andrzej Kozlowski [mailto:andrzej at tuins.ac.jp]
To: mathgroup at smc.vnet.net
> Sent: Tuesday, October 01, 2002 8:05 PM
> Cc: 'Allan Hayes'; mathgroup at smc.vnet.net
> Subject: [mg36939] Re: Accuracy and Precision
>
> So? It's just as it should be, isn't it?
>
> Andrzej
>
> Andrzej Kozlowski
> Toyama International University
> JAPAN
> http://sigma.tuins.ac.jp/~andrzej/
>
>
>
> On Wednesday, October 2, 2002, at 09:02 AM, DrBob wrote:
>
>> Go one step further:
>>
>> Clear[f, a, b, k]
>> k = $MachinePrecision;
>> 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), k];
>> a = 77617.; b = 33096.;
>> a = SetAccuracy[a, k];
>> b = SetAccuracy[b, k];
>> f
>> Accuracy[f]
>> Precision[f]
>>
>> -5.517164009`0*^19
>>
>> Accuracy::mnprec:Value -23 would be inconsistent with $MinPrecision;
>> bounding by $MinPrecision instead.
>>
>> -20
>>
>> 0
>>
>> Accuracy::"mnprec":"Value \!\(-23\) would be inconsistent with
>> $MinPrecision; \
>> bounding by $MinPrecision instead."
>>
>> See that?  NO precision.
>>
>> Bobby
>>
>> -----Original Message-----
>> From: Andrzej Kozlowski [mailto:andrzej at platon.c.u-tokyo.ac.jp]
To: mathgroup at smc.vnet.net
>> Sent: Tuesday, October 01, 2002 5:53 PM
>> Cc: drbob at bigfoot.com
>> Subject: [mg36939] Re: Accuracy and Precision
>>
>> You are of course right, I forgot that Mathematica does not try to
> keep
>>
>> precision or accuracy of machine arithmetic computations. But I think
>> the actual precision you set need not be higher than machine
> precision,
>>
>> it just has to be set explicitely (is that right?). For example:
>>
>> In[1]:=
>> Clear[f,a,b,k]
>>
>> In[2]:=
>> k = $MachinePrecision;
>>
>> 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),k];
>>
>> In[4]:=
>> a=77617.;b=33096.;
>>
>> In[5]:=
>> a=SetAccuracy[a,k];
>>
>> In[6]:=
>> b=SetAccuracy[b,k];
>>
>>
>> In[7]:=
>> f
>>
>> Out[7]=
>> \!\(\(-5.51716400890319`-2.8311*^19\)\)
>>
>> In[8]:=
>> Accuracy[f]
>>
>>  From In[8]:=
>> Accuracy::mnprec: Value -23 would be inconsistent with $MinPrecision;
> \
>> bounding by $MinPrecision instead.
>>
>> Out[8]=
>> -20
>>
>>
>> Andrzej
>>
>>
>> On Wednesday, October 2, 2002, at 01:45 AM, Allan Hayes wrote:
>>
>>> Andrzej
>>>
>>> Yes, like you I took the original question to be about how to get the
>>
>>> result
>>> of using the naive rational versions in place of the inexact numbers.
>>> Bobby raises the question of how we might know accuracy of the
> result.
>>>
>>> You answer this with
>>>> 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
>>>
>>> However this computation is done in machine arithmetic, which means
>>> that
>>> Mathematica keeps no check on the accuracy and precision of the
>>> computation,
>>> and Mathematica gives the default accuracy value without any real
>>> signifcance:
>>>
>>>     $MachinePrecision - Log[10,Abs[f]]//Round
>>>
>>>         -5
>>>
>>> To get meaningful accuracy and precision values we need to force the
>>> computation to be in bignums (bigfloat, arbitrary precision)
>>> arithmetic.
>>> Mathematica then keeps track of the accuracy and precision that it
> can
>>> guarantee.
>>>
>>>     Clear[f,a,b,k]
>>>     k=50;
>>>
>>> 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),k];
>>>     a=77617.;b=33096.;
>>>     a=SetAccuracy[a,k];
>>>     b=SetAccuracy[b,k];
>>>     f
>>>
>>>         -0.82739605995
>>>
>>>     Accuracy[f]
>>>
>>>         11
>>>
>>>     Precision[f]
>>>
>>>         11
>>>
>>> Which tells  us that the error in the computed value of f is not more
>>
>>> than
>>>
>>>         10^-11
>>>
>>>
>>> The above results are rounded. More accurately we get
>>>
>>>     Accuracy[f, Round->False]
>>>
>>>         11.4956
>>>
>>>     Precision[f, Round->False]
>>>
>>>         11.4133
>>>
>>> There are several related issues here:
>>> - is the precision (accuracy) of rhe input known?
>>> - how does Mathematica interpret what one gives it?
>>> - how does Mathematica go about the calculation?
>>>
>>> --
>>> Allan
>>>
>>> ---------------------
>>> Allan Hayes
>>> Mathematica Training and Consulting
>>> Leicester UK
>>> www.haystack.demon.co.uk
>>> hay at haystack.demon.co.uk
>>> Voice: +44 (0)116 271 4198
>>> Fax: +44 (0)870 164 0565
>>>
>>>
>>> "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?
>>>>
>>>> Andrzej
>>>>
>>>>
>>>> Andrzej Kozlowski
>>>> Yokohama, Japan
>>>> http://www.mimuw.edu.pl/~akoz/
>>>> http://platon.c.u-tokyo.ac.jp/andrzej/
>>>>
>>>> On Tuesday, October 1, 2002, at 02:59 AM, DrBob wrote:
>>>>
>>>>> Actually, we don't know whether SetAccuracy "succeeds", because we
>>>>> don't
>>>>> know how inexact those numbers really are.  If they are known to
>> more
>>>>> digits than shown in the original post, they should be entered with
>>
>>>>> as
>>>>> much precision as they deserve.  If not, there's no trick or
>>>>> algorithm
>>>>> that will give the result precision, because the value of f really
>> is
>>>>> "in the noise".  That is, we have no idea what the value of f
> should
>>>>> be.
>>>>>
>>>>> Mathematica's failing is in returning a value without pointing out
>>>>> that
>>>>> it has no precision.
>>>>>
>>>>> Bobby
>>>>>
>>>>> -----Original Message-----
>>>>> From: Allan Hayes [mailto:hay at haystack.demon.co.uk]
To: mathgroup at smc.vnet.net
>>>>> Sent: Monday, September 30, 2002 11:59 AM
>>>>> Subject: [mg36939] Re: Accuracy and Precision
>>>>>
>>>>> Andrzej, Bobby, Peter
>>>>>
>>>>> It looks as if using SetAccuracy succeeds here because the inexact
>>>>> numbers
>>>>> that occur have finite binary representations. If we change them
>>>>> slightly to
>>>>> avoid this then we have to use Rationalize:
>>>>>
>>>>> 1) Using SetAccuracy
>>>>>
>>>>>     Clear[a,b,f]
>>>>>
>>>>>
>>>>> f=SetAccuracy[333.74*b^6+a^2*(11*a^2*b^2-b^6-121*b^4-2)+5.4*b^8+a/
>>>>> (2*b),
>>>>>       Infinity];
>>>>>
>>>>>     a=77617.1;
>>>>>     b=33096.1;
>>>>>
>>>>>     a=SetAccuracy[a,Infinity];b=SetAccuracy[b,Infinity];
>>>>>
>>>>>     f
>>>>>
>>>>>
>>>>>
> -1564032114908486835197494923989618867972540153873951942813115514949
>>>>> 3891236234\
>>>>>
>>>>>
>> 525007719168693704591197760187988046304361497869199129319625743010292
>>>>> 36
>>>>> 3
>>>>> 1246
>>>>> 75\
>>>>>
>>>>> /
>>>>>
>> 108671061439707605510003578275547938881981431359756495796079898677435
>>>>> 72
>>>>> 8240
>>>>> 16\
>>>>>         0653953612982932181371232436367739737604096
>>>>>
>>>>> 2) Rewriting as fractions
>>>>>
>>>>>     a=776171/10;
>>>>>     b=330961/10;
>>>>>
>>>>>
> f=33374/100*b^6+a^2*(11*a^2*b^2-b^6-121*b^4-2)+54/10*b^8+a/(2*b)
>>>>>
>>>>>         -(5954133808997234115690303589909929091649391296257/
>>>>>            41370125000000)
>>>>>
>>>>> 3) Using Rationalize
>>>>>
>>>>>     Clear[a,b,f]
>>>>>
>>>>>
>>>>> f=Rationalize[333.74*b^6+a^2*(11*a^2*b^2-b^6-121*b^4-2)+5.4*b^8+a/
>>>>> (2*b),
>>>>> 0];
>>>>>
>>>>>     a=77617.1;
>>>>>     b=33096.1;
>>>>>
>>>>>     a=Rationalize[a,0];b=Rationalize[b,0];
>>>>>
>>>>>     f
>>>>>
>>>>>         -(5954133808997234115690303589909929091649391296257/
>>>>>            41370125000000)
>>>>>
>>>>>
>>>>> I use Rationalize[. , 0] besause of results like
>>>>>
>>>>>     Rationalize[3.1415959]
>>>>>
>>>>>         3.1416
>>>>>
>>>>>     Rationalize[3.1415959,0]
>>>>>
>>>>>         31415959/10000000
>>>>> --
>>>>> Allan
>>>>>
>>>>> ---------------------
>>>>> Allan Hayes
>>>>> Mathematica Training and Consulting
>>>>> Leicester UK
>>>>> www.haystack.demon.co.uk
>>>>> hay at haystack.demon.co.uk
>>>>> Voice: +44 (0)116 271 4198
>>>>> Fax: +44 (0)870 164 0565
>>>>>
>>>>>
>>>>> "Andrzej Kozlowski" <andrzej at tuins.ac.jp> wrote in message
>>>>> news:an8s8i$6pk$1 at smc.vnet.net...
>>>>>> Well, first of of all, your using SetAccuracy and SetPrecision
> does
>>>>>> nothing at all here, since they do not change the value of a or b.
>>
>>>>>> You
>>>>>> should use a = SetAccuracy[a, Infinity] etc. But even then you
>> won't
>>>>>> get the same answer as  when you use exact numbers because of the
>>>>>> way
>>>>>> you evaluate f. Here is the order of evaluation that will give you
>>
>>>>>> the
>>>>>> same answer, and should explain what is going on:
>>>>>>
>>>>>> 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];
>>>>>>
>>>>>> a = 77617.;
>>>>>>
>>>>>>
>>>>>>   b = 33096.;
>>>>>>
>>>>>> a = SetAccuracy[a, Infinity]; b = SetAccuracy[b, Infinity];
>>>>>>
>>>>>> f
>>>>>>
>>>>>>    54767
>>>>>> -(-----)
>>>>>>    66192
>>>>>>
>>>>>> Andrzej Kozlowski
>>>>>> Toyama International University
>>>>>> JAPAN
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sunday, September 29, 2002, at 03:55 PM, Peter Kosta wrote:
>>>>>>
>>>>>>> Could someone explain what is going on here, please?
>>>>>>>
>>>>>>> In[1]:=
>>>>>>> a = 77617.; b = 33096.;
>>>>>>>
>>>>>>> In[2]:=
>>>>>>> SetAccuracy[a, Infinity]; SetAccuracy[b, Infinity];
>>>>>>> SetPrecision[a, Infinity]; SetPrecision[b, Infinity];
>>>>>>>
>>>>>>> In[4]:=
>>>>>>> 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[5]:=
>>>>>>> SetAccuracy[f, Infinity]; SetPrecision[f, Infinity];
>>>>>>>
>>>>>>> In[6]:=
>>>>>>> f
>>>>>>>
>>>>>>> Out[6]=
>>>>>>> -1.1805916207174113*^21
>>>>>>>
>>>>>>> In[7]:=
>>>>>>> a = 77617; b = 33096;
>>>>>>>
>>>>>>> In[8]:=
>>>>>>> g := (33375/100)*b^6 + a^2*(11*a^2*b^2 - b^6 - 121*b^4 - 2) +
>>>>>>> (55/10)*b^8 + a/(2*b)
>>>>>>>
>>>>>>> In[9]:=
>>>>>>> g
>>>>>>>
>>>>>>> Out[9]=
>>>>>>> -(54767/66192)
>>>>>>>
>>>>>>> In[10]:=
>>>>>>> N[%]
>>>>>>>
>>>>>>> Out[10]=
>>>>>>> -0.8273960599468214
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> PK
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>> Andrzej Kozlowski
>> Yokohama, Japan
>> http://www.mimuw.edu.pl/~akoz/
>> http://platon.c.u-tokyo.ac.jp/andrzej/
>>
>>
>>
>>
>
>
>
>
>
Andrzej Kozlowski
Yokohama, Japan
http://www.mimuw.edu.pl/~akoz/
http://platon.c.u-tokyo.ac.jp/andrzej/



  • Prev by Date: RE: Accuracy and Precision
  • Next by Date: Re: Accuracy and Precision
  • Previous by thread: RE: Accuracy and Precision
  • Next by thread: Re: Accuracy and Precision