Skip to content
Back to formatted view

Raw Message

Message-ID: <42F34352.6070504@stats.uwo.ca>
Date: 2005-08-05T10:45:38Z
From: Duncan Murdoch
Subject: How to set the floating point precision beyond e-22?
In-Reply-To: <000001c59998$f4ddc320$8b554681@uwiwoeko152>

Roy Nitze wrote:
> We have a problem inverting a matrix which has the following eigenvalues:
>  
> 
>>eigen(tcross, only.values=TRUE)
> 
> $values
>  [1]  7.917775e+20  2.130980e+16  7.961620e+13  8.241041e+12  2.258325e+12
>  [6]  3.869428e+11  6.791041e+10  2.485352e+09  9.863098e+08  9.819373e+05
> [11]  3.263408e+05  2.929853e+05  2.920419e+05  2.714355e+05  8.733435e+04
> [16]  8.127136e+04  6.543883e+04  5.335074e+04  3.773311e+04  2.904373e+04
> [21]  2.418297e+04  1.387422e+04  8.925090e+03  5.538344e+03  4.831908e+03
> [26]  1.133571e+03  9.882477e+02  7.725812e+02  5.081682e+02  3.010545e+02
> [31]  1.801611e+02  1.319787e+02  1.050521e+02  7.096471e+01  5.576549e+01
> [36]  4.192645e+01  3.549810e+01  2.638731e+01  2.444429e+01  1.735139e+01
> [41]  1.058796e+01  7.425778e+00  7.209576e+00  4.689665e+00  3.181650e+00
> [46]  3.002956e+00  1.959247e+00  1.551665e+00  1.079589e+00  1.064981e+00
> [51]  5.409617e-01  4.076501e-01  2.010129e-01  1.302394e-01  4.029787e-02
> [56]  2.599448e-02  1.061294e-02  1.634286e-03  4.095303e-09  1.021885e-10
> [61]  2.124763e-11  6.906665e-12  2.850103e-12  9.440867e-13  6.269723e-13
> [66]  1.043794e-13 -1.300171e-13 -7.220665e-13 -4.166945e-12 -6.145350e-12
> [71] -2.776804e-11 -5.269669e-11 -7.154246e-10 -1.490515e-09 -1.294256e-08
> [76] -1.224821e-02 -3.278657e+00 -4.620100e+01 -9.781843e+02 -1.303929e+04
> [81] -5.545949e+04 -8.077540e+04 -8.577861e+04 -1.329961e+05 -1.450908e+05
> [86] -3.022353e+05 -4.015776e+05
> 
> As yout can see, the eigenvalues spread very much (between e+20 and e-13).
> We presume, that it has something to do with R's floating point precision,
> which I read is about 22-digits in mantissa as default.

Less than that.  It depends a bit on the platform and the exact 
calculation, but you can't count on more than 15-16 decimal digits 
precision.

> Can this precision
> be set to values above 22? 

No.  R generally uses the floating point hardware type "double 
precision", and it's a fixed size.

The problem occurs especially when trying to
> perform 2SLS with the 'systemfit' package. There appears always an error
> message like the following from the inverting routine:
>  
> solve(tcross)
> Error in solve.default(tcross) : Lapack routine dgesv: system is exactly
> singular

You will have to find a different solution to the problem.  To machine 
precision, that matrix looks singular.  This usually indicates that it's 
not the right matrix to try to invert.

Duncan Murdoch