Re: how to avoid numeric error
- To: mathgroup at smc.vnet.net
- Subject: [mg20397] Re: [mg20309] how to avoid numeric error
- From: "Atul Sharma" <atulksharma at yahoo.com>
- Date: Tue, 26 Oct 1999 00:32:51 -0400
- References: <7ubq06$5q7$4@dragonfly.wolfram.com>
- Sender: owner-wri-mathgroup at wolfram.com
Thanks for the comment and function. I still am not clear on why the floating point x1 doesn't force machine precision, regardless of whether the exponent is a float or integer, since I had thought that even one floating point parameter results in the entire expression being evaluated numerically. Atul BobHanlon at aol.com wrote in message <7ubq06$5q7$4 at dragonfly.wolfram.com>... >Atul, > >(-5.2)^1208. > >8.551437202665365431742222523666`12.6535*^864 - > 2.4803091328936406321397756468`12.6535*^852*I > >Despite its large magnitude, the magnitude of the imaginary part is small >compared to the magnitude of the real part (differ by 12 orders of magnitude). > >10^864*Chop[(-5.2)^1208./10^864] == (-5.2)^1208 > >True > >Extending the concept of Chop > >relativeChop[x_ , delta_:10^-10] /; (Abs[x] == 0) = 0; >relativeChop[x_, delta_:10^-10] := > Module[{mag = Abs[x]}, mag*Chop[x/mag, delta]] > >relativeChop[(-5.2)^1208.] == (-5.2)^1208 > >True > >Bob Hanlon > >In a message dated 10/16/1999 12:38:51 AM, atulksharma at yahoo.com writes: > >>I am at a loss to explain this behavior, though I perhaps >>misunderstand how Mathematica implements it's machine precision routines. >>This is a simple example of a problem that cropped up during evaluation >>of >>constants of integration >>in a WKB approximation, where I would get quite different results depending >>on how the constant was evaluated. I have localized the discrepancy to >>one >>term of the form shown below: >> >> >>testParameters = >> {x1 -> 5.2, x2 -> 0.3, x3 -> 0.002, x4 -> -0.00025} >> >>(-x1)^(-(x2 + x3)/x4) /. testParameters >> >>In this case, as it turns out, x1 = -5.2, which is a floating point number, >>and the exponent = 1208 (which may be integer or floating point, but is >>floating point in this case). >>I assumed that the result would be evaluated to machine precision in either >>case, >>since x1 is a float regardless. However, depending on whether the exponent >>is integer or not, I get two different results, with a large imaginary >>component >> >>In[27]:= >>(-5.2)^1208. >> >>Out[27]= >>8.55143720266536543174145`12.6535*^864 - >> 2.48026735232231456274073`12.6535*^852*I >> >>In[28]:=(-5.2)^1208 >> >>Out[28]= >>8.55143720266675767908621`12.8725*^864 >> >>I assume that this has some simple relationship to machine precision and >>round-off error, but am I wrong in assuming that x1 should determine the >>numeric precision of the entire operation? >> >>I am using Mathematica 3.01.1 on a PC/Win95 platform. >> >>I also encountered another problem, which bothers me because it's so >>insidious. In moving a notebook from one machine to another by floppy (work >>to home), a parsing error occurred buried deep inside about 30 pages of >>code. A decimal number of the form 1.52356 was parsed as 1.5235 6 with >>a >>space inserted and interpreted as multiplication. The same error occured >>in >>the same place on several occasions (i.e. when I start getting bizarre >>results, I know to go and correct this error). >> >>I know these sound minor, but they have a large effect on the solution >>and >>could easily go undetected. Thanks in advance. >> > > >