Re: [R] How to set the floating point precision beyond e-22?

From: Duncan Murdoch <>
Date: Fri 05 Aug 2005 - 20:45:38 EST

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 mailing list PLEASE do read the posting guide! Received on Fri Aug 05 20:52:33 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:39:42 EST