Re: On default numerical precision
- To: mathgroup at smc.vnet.net
- Subject: [mg90719] Re: On default numerical precision
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 21 Jul 2008 04:28:45 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g5pj07$qbc$1@smc.vnet.net> <g5s9q0$51h$1@smc.vnet.net> <g5v5nr$ibi$1@smc.vnet.net>
sergio_r at mail.com wrote: > Jens thanks for you reply. I am not sure what > I am missing but here are the results of following > the sugested approach: > > In[1]:= $Post = ( # /. a_Real :> NumberForm[a, {32, 16}]) &; > > In[2]:= a=2. > > Out[2]//NumberForm= 2. > > In[3]:= b=3. > > Out[3]//NumberForm= 3. > > In[4]:= a*b > > Out[4]//NumberForm= 6. What version of Mathematica do you use? Jens-Peer's solution works fine on my system (64-bit Intel Core 2 Duo Mac OS X Leopard 1.5.4 Mathematica 6.0.3). In[1]:= $Post =. $Post = #1 /. a_Real :> NumberForm[a, {32, 30}] & ; a = 2. Precision[%] Precision[a] a = 0.3 b = 0.7 a*b Out[3]//NumberForm= 2.000000000000000000000000000000 Out[4]= MachinePrecision Out[5]= MachinePrecision Out[6]//NumberForm= 0.300000000000000000000000000000 Out[7]//NumberForm= 0.700000000000000000000000000000 Out[8]//NumberForm= 0.210000000000000000000000000000 > But the following form works the way I was looking > for: > > In[5]:= $Post =. > > In[6]:= $Post > > Out[6]= $Post > > In[7]:= $Post = ( # /. a_Real :> SetPrecision[a, 32]) &; > > In[8]:= a=2. > > Out[8]= 2.0000000000000000000000000000000 > > In[9]:= b=3. > > Out[9]= 3.0000000000000000000000000000000 > > In[10]:= a*b > > Out[10]= 6.0000000000000000000000000000000 Are you hundred percent sure that changing the precision of result is the thing to do if what you want is just more zeros to your display? What the above does is evaluating a numeric expression according to the rules and precision of hardware floating-point arithmetic (lowest precision but fastest computational model out of the three Mathematica implements), then Mathematica converts the result/output to higher precision according to the arbitrary-precision model. In other words, you upcast real numbers from lower to higher precision which might lead to some surprising result to say the least. (Be sure to test thoroughly your solution before using it for real work.) In[9]:= $Post =. $Post = #1 /. a_Real :> SetPrecision[a, 30] & ; a = 2. Precision[%] Precision[a] a = 0.3 b = 0.7 a*b Out[11]= 2.00000000000000000000000000000 Out[12]= 30.0000000000000000000000000000 Out[13]= MachinePrecision Out[14]= 0.299999999999999988897769753748 Out[15]= 0.699999999999999955591079014994 Out[16]= 0.209999999999999992228438827624 > Thanks again, > > Sergio > > > On Jul 19, 4:49 am, Jens-Peer Kuska <ku... at informatik.uni-leipzig.de> > wrote: >> Hi, >> >> $Post = ( # /. a_Real :> NumberForm[a, {32, 16}]) &; >> >> Regards >> Jens >> >> sergi... at mail.com wrote: >>> Hello all, >>> I am wonderin on how to change the mathematica default printing >>> precision, so I don't have to type on any defined constant the >>> required precision, like " `30 " in: >>> In[1]:= a=2.3`30; b=2.1`30; >>> In[2]:= a*b >>> Out[2]= 4.83000000000000000000000000000 >>> I would like to be able to do: >>> a=2.3; b=2.1; and obtain >>> a*b = 4.83000000000000000000000000000 >>> Regards, >>> Sergio >>> PS. Apparently the internal variable $Pre could be set to do that, but >>> the respective help page [ http://reference.wolfram.com/mathematica/ref/$Pre.html >>> ] is not clear about how to do that. > > Regards, -- Jean-Marc