Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: N[] MachinePrecision vs. Arbitrary Precision

30 views
Skip to first unread message

DrMajorBob

unread,
Apr 28, 2011, 6:33:12 AM4/28/11
to
These are the same:

N[Sin[Exp[100]]]
Sin[Exp[100.]]
RealDigits /@ {%, %%}

-0.999105

-0.999105

{{{9, 9, 9, 1, 0, 5, 0, 1, 3, 0, 7, 7, 4, 3, 9, 3},
0}, {{9, 9, 9, 1, 0, 5, 0, 1, 3, 0, 7, 7, 4, 3, 9, 3}, 0}}

But they're not precise. How could they be?

D[Sin[Exp[x]], x]
% /. x -> 100 // N

E^x Cos[E^x]

-1.13704*10^42

You need 43 digits of accuracy in the argument (100.) to get ONE digit
accuracy in Sin[Exp[100.]], and machine precision doesn't give that much.

$MachinePrecision

15.9546

Using precision arithmetic gives better results (for this problem):

N[Sin[Exp[100]], 1]
N[Sin[Exp[100]], 11]
N[Sin[Exp[100]], 50]

0.1

0.14219812366

0.14219812365823863777245030647868525633473760956388

And that's because it's completely different arithmetic. (We mortals are
not privy to the details, which may be just as well.)

Bobby

On Wed, 27 Apr 2011 04:39:25 -0500, Rafael Dunn
<worthless....@gmail.com> wrote:

> Mathematica 8.0.1.0, Mac OSX x86
>
> In:=
> N[Sin[Exp[100]]]
> N[Sin[Exp[100]], 1]
> N[Sin[Exp[100]], 11]
>
> Out:=
> -0.999105
> 0.1
> 0.14219812366
>
> I realize that N[exp] = N[exp, MachinePrecision]. This indicates when
> N[] is asked to calculate to MachinePrecision, it produces an incorrect
> result in this example. However, when I use N[exp,n] where n <
> MachinePrecision, I get a correct output. Is this because N[exp,n] uses
> ExtraPrecision, while N[exp] does not? If I set MaxExtraPrecision =
> 0, then N[exp,n] produces a result of 0 with the note that there are no
> significant digits to display until I have made n high enough for
> Mathematica to be able to internally compute it.
>


--
DrMaj...@yahoo.com

Sseziwa Mukasa

unread,
Apr 28, 2011, 6:33:23 AM4/28/11
to
On Apr 27, 2011, at 5:39 AM, Rafael Dunn wrote:

> Mathematica 8.0.1.0, Mac OSX x86
>
> In:=
> N[Sin[Exp[100]]]
> N[Sin[Exp[100]], 1]
> N[Sin[Exp[100]], 11]
>
> Out:=
> -0.999105
> 0.1
> 0.14219812366
>
> I realize that N[exp] = N[exp, MachinePrecision]. This indicates when
> N[] is asked to calculate to MachinePrecision, it produces an incorrect
> result in this example. However, when I use N[exp,n] where n <
> MachinePrecision, I get a correct output. Is this because N[exp,n] uses
> ExtraPrecision, while N[exp] does not?

Not really, the behavior of N[e] and N[e,p] is different even if p == MachinePrecision, the relevant text in the help guide is:

> N[e] typically works by replacing numbers with machine numbers and computing the result:


and

> N[e,p] works adaptively using arbitrary-precision numbers when p is not MachinePrecision:

So N[Sin[Exp[100]]] is equivalent to N[Sin[Exp[100.]]] but N[Sin[Exp[100]], p] evaluates Exp[100] arbitrary precision. Consider:

In[41]:= N[Exp[100.]]
N[Exp[100]]
N[Exp[100], MachinePrecision]
N[Exp[100], $MachinePrecision]
Out[41]= 2.68812*10^43
Out[42]= 2.68812*10^43
Out[43]= 2.68812*10^43
Out[44]= 2.688117141816135*10^43
In[37]:= $MachinePrecision == MachinePrecision
Out[37]= True

Regards,
Sseziwa

0 new messages