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

From: Duncan Murdoch <murdoch_at_stats.uwo.ca>
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



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html 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