Re: A simple error
- To: mathgroup at smc.vnet.net
- Subject: [mg102177] Re: A simple error
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 31 Jul 2009 05:57:51 -0400 (EDT)
On 7/30/09 at 5:34 AM, y.eaidgah at gmail.com (Youness Eaidgah) wrote:
>Dear all, I have faced a awkward situation in Mathematica. I want to
>sum the following simple equations:
>DTEP12 = 0.11 (80000 - 12000 P + 800000 (1 - R)) + 0.11 (40000 -
>12000 P + 1000000 (1 - R)) + 0.28 (-12000 P + 1200000 (1 - R))
>MTEP12 = 0.11 (-130000 + 12000 (-35 + P) + 800000 R) + 0.11 (-130000
>+ 12000 (-35 + P) + 1000000 R) + 0.28 (-130000 + 12000 (-35 + P) +
>1200000 R)
>Obviously, the result of the DTEP12+MTEP12 is : 272200
>However, when I use the following commands
>Simplify[DTEP12+ MTEP12] or FullSimplify[DTEP12+MTEP12]
>Mathematica returns: 272200.+ 0. P + 5.82077*10^-11 R. I am suprised
>where the last term comes form (5.82077*10^-11 R)! It is a really
>really small value, however, it is still an error. it creates some
>inconveniences later in my calculations. I would appreciate if you
>could help me out.
The small term arises from using machine precision numbers.
Values like 0.11 and 0.28 cannot be expressed in a finite number
of binary digits. As a consequence, the coefficients simplify to
values that differ from what you are expecting.
This issue comes up repeatedly here and is not a Mathematica
issue. It is inherent in floating point arithmetic used in any
modern computer.
You have two choices for dealing with this issue.
1) use exact expressions, e.g.,
In[14]:= DTEP12 =
11/100 (80000 - 12000 P + 800000 (1 - R)) +
11/100 (40000 - 12000 P + 1000000 (1 - R)) +
28/100 (-12000 P + 1200000 (1 - R));
MTEP12 = 11/100 (-130000 + 12000 (-35 + P) + 800000 R) +
11/100 (-130000 + 12000 (-35 + P) + 1000000 R) +
28/100 (-130000 + 12000 (-35 + P) + 1200000 R);
In[16]:= Simplify[DTEP12 + MTEP12]
Out[16]= 272200
2) use Chop, e.g.,
In[17]:= DTEP12 =
0.11 (80000 - 12000 P + 800000 (1 - R)) +
0.11 (40000 - 12000 P + 1000000 (1 - R)) +
0.28 (-12000 P + 1200000 (1 - R));
MTEP12 = 0.11 (-130000 + 12000 (-35 + P) + 800000 R) +
0.11 (-130000 + 12000 (-35 + P) + 1000000 R) +
0.28 (-130000 + 12000 (-35 + P) + 1200000 R);
In[19]:= Chop[Simplify[DTEP12 + MTEP12]]
Out[19]= 272200.