arbitrary precision linear algebra
Robin Becker
robin at reportlab.com
Wed Mar 2 12:28:57 EST 2011
On 02/03/2011 16:39, Ben123 wrote:
...........
>> Languages can't support infinitely large or small numbers, so try to
>> multiply the inner variables by 10^n to increase their values if this
>> will not involve on the method. For example, I did this when was
>> calculating geometric means of computer benchmarks.
>
> Currently I have values between 1 and 1E-300 (not infinitely small). I
> don't see how scaling by powers of 10 will increase precision.
>
>> In such way you will be storing the number of zeros as n.
>
> Are you saying python cares whether I express a number as 0.001 or
> scaled by 10^5 to read 100? If this is the case, I'm still stuck. I
> need the full range of eigenvalues from 1 to 1E-300, so the entire
> range could be scaled by 1E300 but I would still need better precision
> than 1E19
>
.......
If you enter a number as 1e-19 then python will treat as a float; by default I
think that float is IEEE double precision so you're getting a 48 bit mantissa
(others may have better details). That means you've already lost any idea of
arbitrary precision.
When you say you have numbers like 1E-300 are those actually numerically zero or
have you some valid inputs that vary over a huge range. It should be possible to
compute determinants/inverses etc to arbitrary precision as those are known to
be polynomial functions of the input elements. However, eigenvalues are not.
eg
[0 2]
[1 0]
has eigenvalues +/- sqrt(2) so even though you can represent the matrix in
finite precision the eigenvalues require infinite precision.
Eigenvalues are roots of a polynomial in the elements and root solving may
require an infinite number of steps so it will be difficult with arbitrary
matrices to keep arbitrary precision.
--
Robin Becker
More information about the Python-list
mailing list