Mark Dickinson on Tue, 17 Apr 2001 13:04:44 -0400 (EDT)

 greal() bug for type t_RFRAC?

```Hi,

I encountered the following behaviour:

GP/PARI CALCULATOR Version 2.1.0 (released)
UltraSparc (MicroSparc kernel) 32-bit version

[snipped]

%1 = w
? real(1/(a+b*w))
%2 = a/(a^2 + b^2)

Unless I've misunderstood something, this doesn't seem like a useful
answer;  I was expecting (a+b)/(a^2+a*b+b^2). The problem seems to lie in
the treatment of type t_RFRAC in the function op_ReIm(GEN f(GEN), GEN x)
in basemath/gen3.c, where the formulas for real and imaginary parts appear
to assume a complex type.  The following patch (against the source for
version 2.1.0) fixes the problem for me:

*** pari-2.1.0/src/basemath/gen3.c	Fri Nov  3 16:00:22 2000
--- pari-2.1.0/src/basemath/gen3fix.c	Tue Apr 17 12:53:44 2001
***************
*** 2335,2347 ****
case t_RFRAC: case t_RFRACN:
{
av=avma; r2=greal((GEN)x[2]); i2=gimag((GEN)x[2]);
!       if (f==greal)
!                   gmul(gimag((GEN)x[1]),i2));
!       else
!         p1 = gsub(gmul(gimag((GEN)x[1]),r2),
!                   gmul(greal((GEN)x[1]),i2));
tetpil=avma; return gerepile(av,tetpil,gdiv(p1,p2));
}

--- 2335,2342 ----
case t_RFRAC: case t_RFRACN:
{
av=avma; r2=greal((GEN)x[2]); i2=gimag((GEN)x[2]);
!       p1 = f(gmul((GEN)x[1],gconj((GEN)x[2])));
!       p2 = gnorm((GEN)x[2]);
tetpil=avma; return gerepile(av,tetpil,gdiv(p1,p2));
}

However, this is the first time I've delved into the PARI source, so I'm
not guaranteeing either that this patch is sensible or that it doesn't
break something else :)

Thanks,

Mark Dickinson

```