Problems with numerical precision
- To: mathgroup at smc.vnet.net
- Subject: [mg13221] Problems with numerical precision
- From: Joel Cannon <cannon at alpha.centenary.edu>
- Date: Mon, 13 Jul 1998 07:43:10 -0400
- Sender: owner-wri-mathgroup at wolfram.com
I was surprised by the following behavior. I have a large, compicated 39 term exact expression which I will paste at the bottom of this message (actually it is one element of a matrix that needs to be evaluated). The terms vary in magnitude from approx. 10^(21) to 10^(7). The sum of the terms is ~.1 so (in retrospect) the answer would be unreliable until precision was at least greater than 22 digits. What surprised me was that when I innocently used standard precision when converting to a number, mathematica gave an erroneous answer but indicated that this answer had normal precision. As soon as I used a precision sufficient to obtain a reliable number, mathematica returned a reasonable value for precision. (* I innocently evaluate the expression with 16 bit precision and allegedly get a 16 digit answer *) In[167]:= N[exact] Out[167]= -387994. In[168]:= Precision[%] Out[168]= 16 (* Now I evaluate by mapping N to all levels of the expression with 16 and 32 digit precision. An erroneous answer is returned with 16 which indicates full precision and the answer I believe to be correct is returned with 32 digit precison mapped to all levels, with an appropriately reduced precision. *) MapAll[N[#,16]&,exact] Out[163]= -256921.5135808811 In[164]:= Precision[%] Out[164]= 16 (I MapAll[N[#,32]&,exact] Out[161]= -0.13585158 In[162]:= Precision[%] Out[162]= 8 (* Finally, here is a table which shows the precision which is mapped to all levels, the number that is returned and the precision of the number indicated by mathematica. At a precision above 24, the answers appear to become reliable. Sorry for the mess. I couldn't figure out how to paste from the notebook. *) Table[ {j,a=MapAll[N[#,j]&,exact],Precision[a]},{j,16,48,4}] //ColumnForm Precision::"mnprec": "Value \!\(-4\) would be inconsistent with $MinPrecision; bounding by \ $MinPrecision instead." Out[160]= \!\(\* InterpretationBox[GridBox[{ { RowBox[{"{", RowBox[{"16", ",", RowBox[{"-", StyleBox["256921.513580881066`", StyleBoxAutoDelete->True, PrintPrecision->16]}], ",", "16"}], "}"}]}, {\({20, \(-0.12362454`-3.9052\), 0}\)}, {\({24, \(-0.135849898159`0.1358\), 0}\)}, {\({28, \(-0.1358515670090712`4.1358\), 4}\)}, {\({32, \(-0.13585157663154997479`8.1358\), 8}\)}, {\({36, \(-0.135851576631518434076851`12.1358\), 12}\)}, {\({40, \(-0.1358515766315184402124864022`16.1358\), 16}\)}, {\({44, \(-0.13585157663151844021244701292576`20.1358\), 20}\)}, {\({48, \(-0.135851576631518440212447012352254477`24.1358\), 24}\)} }, GridBaseline->{Baseline, {1, 1}}, ColumnAlignments->{Left}], ColumnForm[ {{16, -256921.51358088106, 16}, {20, 0.*^3, 0}, {24, 0.*^-1, 0}, {28, -0.1359, 4}, {32, -0.13585158, 8}, {36, -0.135851576632, 12}, { 40, -0.1358515766315184, 16}, {44, -0.13585157663151844021, 20}, { 48, -0.135851576631518440212447, 24}}], Editable->False]\) Can someone explain what is happening here, and if there is a way I can avoid being harmed by this behavior other than simply maintaining vigilence (never a bad idea)? I am leaving on holidays so, if possible, copy any posts to me at cannon at centenary.edu. Thanks, Here is the exact expression: exact = -98932079226263562173399040*Sqrt[60697/(158260343003171*Pi)] + (167631926666382868224147456*Sqrt[106981/(89790972595727*Pi)])/5 + 26878975514241750849945600*Sqrt[268801/(35736206484587*Pi)] - (183643178376764530781847552*Sqrt[290377/(33080884640531*Pi)])/7 + (4165863466523953112285184*Sqrt[392863/(24451088647349*Pi)])/11 + 3058948678399888982016*Sqrt[1038407/(9250638756541*Pi)] + (1654985324340900265984*Sqrt[1905803/(5040357287329*Pi)])/35 + (849492869112715601248256*Sqrt[3774901/(2544683433887*Pi)])/5 - (203986427460336461836976128*Sqrt[6678671/(1438299332197*Pi)])/185 - (68003308870639942631424*Sqrt[9104173/(1055112643319*Pi)])/5 + (2920584358349766656*Sqrt[13340621/(720051041047*Pi)])/45 + (175270642332778551574528*Sqrt[13499291/(711587596657*Pi)])/55 + (1268747540898097659904000*Sqrt[15389981/(624167634727*Pi)])/3 + 280763897614182480355328*Sqrt[16396861/(585839450567*Pi)] - 28800062220197167104*Sqrt[22342499/(429939732313*Pi)] - 97720275491918237743104*Sqrt[33359131/(287954984177*Pi)] + (41966530783971421192192*Sqrt[154770941/(62065449607*Pi)])/21 - (357808048101469978624*Sqrt[1606415629/(5979727703*Pi)])/45 - (633057454176539218880*Sqrt[18380881181/(522604327*Pi)])/9 + 9676270103070556320*Sqrt[74937438661/(128185967*Pi)] + (47810693140721427456*Sqrt[312474980077/(30741431*Pi)])/7 + (2330163324805222383*Sqrt[628373454919/(15286973*Pi)])/44 - 295629902583470424*Sqrt[1273936457237/(7540351*Pi)] - (52622736437562021*Sqrt[3860008365931/(2488577*Pi)])/16 + (914195162323708076*Sqrt[8917555200659/(1077193*Pi)])/45 - (132856119246638149*Sqrt[18222830192651/(527137*Pi)])/30 - (610534248521959563*Sqrt[24451088647349/(392863*Pi)])/10240 - (108242785354494755*Sqrt[27327687311743/(351509*Pi)])/32768 + (20044562352647247*Sqrt[35736206484587/(268801*Pi)])/160 - (51225637784351357*Sqrt[99463930741931/(96577*Pi)])/20971520 - (33196959658197917*Sqrt[847158306664033/(11339*Pi)])/3932160 + (68764704878583*Sqrt[2287670407064413/(4199*Pi)])/134217728 + (1136338473977591*Sqrt[3509655841893851/(2737*Pi)])/2621440 + (5988802116986951*Sqrt[13472549844689299/(713*Pi)])/184320 - (156103631329335*Sqrt[38890396920095021/(247*Pi)])/738197504 - (5520209566513*Sqrt[43465737734223847/(221*Pi)])/1610612736 - (134206564095*Sqrt[105559648783115057/(91*Pi)])/8589934592 + (24339742449*Sqrt[738917541481805399/(13*Pi)])/1073741824 + (1437739131061*Sqrt[9605928039263470187/Pi])/105553116266496 ------------------------------------------------------------------------------ Joel W. Cannon | (318)869-5160 Dept. of Physics | (318)869-5026 FAX Centenary College of Louisiana | P. O. Box 41188 | Shreveport, LA 71134-1188 |