Karim Belabas on Sat, 23 Jun 2012 19:14:17 +0200

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

```* Dirk Laurie [2012-06-23 08:17]:
> It is easy to find two t_QUADs that generate the same subset of the
> algebraic numbers, e.g. phi=quadgen(5) and sqrt5=quadgen(20).
>
> Is there a function that can convert one kind of QUAD into another
> when possible?

No. For general algebraic numbers -- a much more difficult problem! --, you
have nfisisom().

Here's a straightforward (unoptimized, mostly untested) implementation:

\\ x a t_QUAD. Express x as a t_QUAD of discriminant D
{
my (a,b,c, d = x.disc);
if (!issquare(D/d, &c), error("impossible conversion"));
a = real(x);
b = imag(x); /* x = a + b w, w = ((d%2) + sqrt(d)) / 2 */
if (d % 2, a += b/2);
b /= 2;
/* x = a + b Ñqrt(d), D = d c^2 */
b /= c;
/* x = a + b Ñqrt(D) */
b *= 2;
if (D % 2, a -= b/2);
/* x = a + b (D%2 + Ñqrt(D))/2 */
a + b * quadgen(D);
}

%3 = 1/2 + 1/2*w
%4 = -1 + 2*w

Cheers,

K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`

```