Re: SetPrecision vs N
- To: mathgroup at smc.vnet.net
- Subject: [mg71699] Re: SetPrecision vs N
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 27 Nov 2006 04:04:04 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <ekbmmt$f9g$1@smc.vnet.net>
Andrew Moylan wrote: > Hi all, > > Suppose I want to evaluate an expression at a given precision. What is > the difference between using N[expr, precision] and using > SetPrecision[expr, precision]? . N[expr, n] attempts to give a result with nâ??-digit precision. ==> N[] does *NOT* change the precision of an expression. That is, a machine-precision number is still a machine-precision number. . SetPrecision[expr, p] yields a version of expr in which all numbers have been set to have precision p. ==> SetPrecision[] *CHANGES* the precision of the expression, paddding numbers with additional zeros if needed (in base 2). Therefore, having used SetPrecision[], you have change the computational model from machine arithmetic to arbitrary-precision arithmetic. So, for less than 16-digit precision (typical 32-bit machine) both function might appear equivalent, although they are not because the computational model is different. And to work with higher precision, you must use arbitrary precision, that is SetPrecision[] (N[] is hopeless in this case.) In[1]:= val = 1./3 Out[1]= 0.333333 In[2]:= Precision[N[val]] Out[2]= MachinePrecision In[3]:= Precision[N[val, 15]] Out[3]= MachinePrecision In[4]:= Precision[N[val, 20]] Out[4]= MachinePrecision In[5]:= Precision[SetPrecision[val, 15]] Out[5]= 15. In[6]:= Precision[SetPrecision[val, 20]] Out[6]= 20. Regards, Jean-Marc