[Date Index]
[Thread Index]
[Author Index]
Re: //N bug, but WHY?
*To*: mathgroup at smc.vnet.net
*Subject*: [mg58659] Re: //N bug, but WHY?
*From*: dh <dh at metrohm.ch>
*Date*: Tue, 12 Jul 2005 05:21:42 -0400 (EDT)
*References*: <data3n$mec$1@smc.vnet.net>
*Sender*: owner-wri-mathgroup at wolfram.com
Hi,
your expression consists of a sum with 2 terms that have opposite signs
and nearly the same magnitude. The absolute value is of the order of
10^41 and the difference 10^-41. Therefore, if you calculate with
machine precision= 16 digits, this is doomed to fail.
On the other hand, the help for N[] is partly wrong.
Consider the help:
"N[expr] is equivalent to N[expr, MachinePrecision]"
a=10^16+1; b=10^16;
N[a-b] gives 1. because the argument of N is evaluated with infinite
precision before N sees it. We can prevent this by wrapping a and b in a
function that can not be evaluated with infinite precision:
a=Sqrt[10^16+1]; b=Sqrt[10^16];
N[a-b] gives 0. because 10^16+1 is now evaluated with machine precision
giving 10^16.
On the other hand,
N[a-b,16] gives 5.00.. 10^-9, here it seems that the intermediate
calulations are done with higher precision, exactly what the help says. Even
N[a-b,1] gives 5. 10^-9
In short:
N[expr] does all calculation in machine precision, whereas
N[expr,number] does all intermediate calculation with high enough (up to
an upper Limit of "$MaxExtraPrecision") precision to garantee a result
precision of "number"
sincerely, Daniel
symbio wrote:
> Evaluating (using //N) two exact same expressions, gives wrong answer unless
> fullsimplify is used first, I spent 2 days on a problem thinking my answer
> was wrong, but turned out Mathematica 5 was giving me buggy answers, I
> debugged it to this point, but WHY in the world is this happening? Please
> help!!!
>
> cut and paste below to see the test case:
>
> In[243]:=
> \!\(\(Cosh[\(43\ \[Pi]\)\/\@2] + \((1 - Cosh[43\ \@2\ \[Pi]])\)\ Csch[
> 43\ \@2\ \[Pi]]\ Sinh[\(43\ \[Pi]\)\/\@2] // FullSimplify\) //
> N\[IndentingNewLine]
> Cosh[\(43\ \[Pi]\)\/\@2] + \((1 - Cosh[43\ \@2\ \[Pi]])\)\ Csch[
> 43\ \@2\ \[Pi]]\ Sinh[\(43\ \[Pi]\)\/\@2] // N\)
> Out[243]=
> \!\(6.551787517854307`*^-42\)
> Out[244]=
> \!\(\(-1.9342813113834067`*^25\)\)
>
>
>
> thanks,
>
Prev by Date:
**Fw: Re: Set of strings reducing problem**
Next by Date:
**Fw: Re: Set of strings reducing problem**
Previous by thread:
**Re: //N bug, but WHY?**
Next by thread:
**Re: //N bug, but WHY?**
| |