Function: gcdext
Section: number_theoretical
C-Name: gcdext0
Prototype: GG
Help: gcdext(x,y): returns [u,v,d] such that d=gcd(x,y) and u*x+v*y=d.
Doc: Returns $[u,v,d]$ such that $d$ is the gcd of $x,y$,
 $x*u+y*v=\gcd(x,y)$, and $u$ and $v$ minimal in a natural sense.
 The arguments must be integers or polynomials. \sidx{extended gcd}
 \sidx{Bezout relation}
 \bprog
 ? [u, v, d] = gcdext(32,102)
 %1 = [16, -5, 2]
 ? d
 %2 = 2
 ? gcdext(x^2-x, x^2+x-2)
 %3 = [-1/2, 1/2, x - 1]
 @eprog

 If $x,y$ are polynomials in the same variable and \emph{inexact}
 coefficients, then compute $u,v,d$ such that $x*u+y*v = d$, where $d$
 approximately divides both and $x$ and $y$; in particular, we do not obtain
 \kbd{gcd(x,y)} which is \emph{defined} to be a scalar in this case:
 \bprog
 ? a = x + 0.0; gcd(a,a)
 %1 = 1

 ? gcdext(a,a)
 %2 = [0, 1, x + 0.E-28]

 ? gcdext(x-Pi, 6*x^2-zeta(2))
 %3 = [-6*x - 18.8495559, 1, 57.5726923]
 @eprog\noindent For inexact inputs, the output is thus not well defined
 mathematically, but you obtain explicit polynomials to check whether the
 approximation is close enough for your needs.
