Ilya Zakharevich on Fri, 30 Jul 1999 20:13:03 -0400 (EDT)

 Re: ebcdic packed numbers

```[A complimentary Cc of this posting was sent to Abigail
<abigail@delanet.com>],
who wrote in article <slrn7q4d50.hek.abigail@alexandra.delanet.com>:
> _Finite_ or _repeated_ fractions can be. But I challenge you to find 2 bignums
> that form a ratio equal to the square root of 2.

Say, BignumSQRT(2)/1.  ;-)

> [Not that's it's impossible to do exact arithmetic on algebraic numbers.
>  C-K Yap had an interesting talk on CCCG'92 explaining how to do
>  arithmetic on algebraic numbers, using just integers. It's all based on
>  the fact that an algebraic number is a root of a polynomial of bounded
>  degree, and integer coefficients. But I disgress... ]

Well, Math::Pari module has no problem dealing with algebraic numbers:

perl -MMath::Pari=:DEFAULT,Mod -wle \
' \$t = PARIvar("t"); \$q = PARIvar("q"); \
\$root2 = Mod(\$t, \$t**2 - 2); \
\$root3 = Mod(\$q, \$q**2 - 3); \
print "OK" if 24 == ((\$root2 - \$root3)**2 - 5)**2'
OK

However, not that these are "abstract" algebraic numbers, not complex
algebraic numbers.  Say, \$root2 represents both -sqrt(2) and sqrt(2).

To do calculations with complex algebraic numbers, one needs to keep a
pair of an "abstract" algebraic number (an element of a
finite-dimensional commutative algebra over Q) and a complex
floating-point approximation to this number (a complex number which is
significantly closer to one embedding of the above number into C than
to other embeddings).

PARI has no built-in datatype for such pairs.  But since PARI supports
arbitrary-precision (complex) floating-point arithmetic as well, it
should be a quick exercise to write a Perl module which would use
Math::Pari and will make calculations with complex algebraic numbers.

Ilya

P.S.  BTW, how hard is it to add a new datatype to PARI nowadays?
```