Re: Confusing results with N[expr]?
- To: mathgroup at smc.vnet.net
- Subject: [mg62430] Re: Confusing results with N[expr]?
- From: marks at wolfram.com
- Date: Thu, 24 Nov 2005 06:33:27 -0500 (EST)
- References: <dlp320$1bs$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
This is a bug in NValues that has been fixed in our development version. Generally N works adaptively for arbitrary precision so that when you given an input like Exp[1/1000] the function is capable enough to know that the argument should be evaluated to a given Accuracy in order to obtain the requested Precision in the result. For example: In[1]:= Exp[0.001``10] Out[1]= 1.001000500 In[2]:= Precision[%] Out[2]= 10. If Precision were used in coercing the argument, then the Precision of the result would be too large (resulting in excessive intermediary work): In[3]:= Exp[0.001`10] Out[3]= 1.001000500167 In[4]:= Precision[%] Out[4]= 13. Now when working with machine precision, only machine numbers are used, but the code for NValues was not taking this into account. A simple workaround is to add the second line here to map Accuracy to Precision for NValues with MachinePrecision. In[1]:= N[a] = 2.; In[2]:= N[a, {Infinity, MachinePrecision}]:= N[a, {MachinePrecision, Infinity}]; In[3]:= k = z^(a*Pi); In[4]:= N[k] 6.28319 Out[4]= z Similarly this fix works for converting arguments to Exp: In[1]:= N[a] = 2.; In[2]:= N[a, {Infinity, MachinePrecision}]:= N[a, {MachinePrecision, Infinity}]; In[3]:= N[Exp[z a Pi]] 6.28319 z Out[3]= 2.71828 Mark Sofroniou Research and Development Wolfram Research Thomas Bohl wrote: > I have the impression that since some time (since Vers. 5.0?) N[expr] does > not give anymore the results I expect. > > The following code should illustrate this: > > N[a] = 2.; > > k = z*(a*Pi); > N[k] > > 6.28319 z (* "a" and "Pi" are replaced by their numerical value as > > expected *) > > k = z^(a*Pi) > N[k] > > z^(3.14159 a) (* "Pi" is replaced by its numerical value but not "a", > > why not? *) > > > There are more examples of this behaviour: If the expression is Log[z*a*Pi], > the numerical values of "a" and "Pi" are evaluated, if the expression is > Exp[z*a*Pi] the numerical value of "a" is not evaluated. Why not? > > The motivation behind my question is that I was used to write expressions > symbolically and assign numerical values with N[expr] = num. value. This way > you could keep those expressions symbolically and just apply //N when you > needed numerical values. Now it seems that I have lost this possibility. > > Could you please comment my observation and maybe suggest a way out? > > Thank you very much for any idea. > > Kind regards, > Thomas.