version 1.1, 2001/10/02 11:17:06 |
version 1.2, 2002/09/11 07:26:53 |
Line 15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
|
Line 15 Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
|
|
|
/********************************************************************/ |
/********************************************************************/ |
/** **/ |
/** **/ |
/** TRANSCENDENTAL FONCTIONS **/ |
/** TRANSCENDENTAL FUNCTIONS **/ |
/** (part 2) **/ |
/** (part 2) **/ |
/** **/ |
/** **/ |
/********************************************************************/ |
/********************************************************************/ |
Line 33 static GEN mpach(GEN x); |
|
Line 33 static GEN mpach(GEN x); |
|
static GEN |
static GEN |
mpatan(GEN x) |
mpatan(GEN x) |
{ |
{ |
long l,l1,l2,n,m,u,i,av0,av,lp,e,sx,s; |
long l, l1, l2, n, m, u, i, lp, e, sx, s; |
|
gpmem_t av0, av; |
double alpha,beta,gama=1.0,delta,fi; |
double alpha,beta,gama=1.0,delta,fi; |
GEN y,p1,p2,p3,p4,p5,unr; |
GEN y,p1,p2,p3,p4,p5,unr; |
|
|
sx=signe(x); |
sx=signe(x); |
if (!sx) |
if (!sx) return realzero_bit(expo(x)); |
{ |
|
y=cgetr(3); y[1]=x[1]; y[2]=0; return y; |
|
} |
|
l = lp = lg(x); |
l = lp = lg(x); |
if (sx<0) setsigne(x,1); |
if (sx<0) setsigne(x,1); |
u = cmprs(x,1); |
u = cmprs(x,1); |
|
|
GEN |
GEN |
gatan(GEN x, long prec) |
gatan(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av, tetpil; |
GEN y,p1; |
GEN y,p1; |
|
|
switch(typ(x)) |
switch(typ(x)) |
Line 161 gatan(GEN x, long prec) |
|
Line 159 gatan(GEN x, long prec) |
|
void |
void |
gatanz(GEN x, GEN y) |
gatanz(GEN x, GEN y) |
{ |
{ |
long av=avma,prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gatanz"); |
if (!prec) err(infprecer,"gatanz"); |
gaffect(gatan(x,prec),y); avma=av; |
gaffect(gatan(x,prec),y); avma=av; |
Line 177 gatanz(GEN x, GEN y) |
|
Line 176 gatanz(GEN x, GEN y) |
|
static GEN |
static GEN |
mpasin(GEN x) |
mpasin(GEN x) |
{ |
{ |
long l,u,v,av; |
long l, u, v; |
|
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
|
u=cmprs(x,1); v=cmpsr(-1,x); |
u=cmprs(x,1); v=cmpsr(-1,x); |
|
|
GEN |
GEN |
gasin(GEN x, long prec) |
gasin(GEN x, long prec) |
{ |
{ |
long av,tetpil,l,sx; |
long l, sx; |
|
gpmem_t av, tetpil; |
GEN y,p1; |
GEN y,p1; |
|
|
switch(typ(x)) |
switch(typ(x)) |
{ |
{ |
case t_REAL: sx=signe(x); |
case t_REAL: sx=signe(x); |
if (!sx) { y=cgetr(3); y[1]=x[1]; y[2]=0; return y; } |
if (!sx) return realzero_bit(expo(x)); |
if (sx<0) setsigne(x,1); |
if (sx<0) setsigne(x,1); |
if (cmpsr(1,x)>=0) { setsigne(x,sx); return mpasin(x); } |
if (cmpsr(1,x)>=0) { setsigne(x,sx); return mpasin(x); } |
|
|
Line 248 gasin(GEN x, long prec) |
|
Line 249 gasin(GEN x, long prec) |
|
void |
void |
gasinz(GEN x, GEN y) |
gasinz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gasinz"); |
if (!prec) err(infprecer,"gasinz"); |
gaffect(gasin(x,prec),y); avma=av; |
gaffect(gasin(x,prec),y); avma=av; |
Line 264 gasinz(GEN x, GEN y) |
|
Line 266 gasinz(GEN x, GEN y) |
|
static GEN |
static GEN |
mpacos(GEN x) |
mpacos(GEN x) |
{ |
{ |
long l,u,v,sx,av; |
long l, u, v, sx; |
|
gpmem_t av; |
GEN y,p1,p2; |
GEN y,p1,p2; |
|
|
u=cmprs(x,1); v=cmpsr(-1,x); sx = signe(x); |
u=cmprs(x,1); v=cmpsr(-1,x); sx = signe(x); |
|
|
y=mppi(2-l); setexpo(y,0); return y; |
y=mppi(2-l); setexpo(y,0); return y; |
} |
} |
l=lg(x); |
l=lg(x); |
if (!u) |
if (!u) return realzero_bit( -(bit_accuracy(l)>>1) ); |
{ |
|
y = cgetr(3); |
|
y[1] = evalexpo(-(bit_accuracy(l)>>1)); |
|
y[2] = 0; return y; |
|
} |
|
if (!v) return mppi(l); |
if (!v) return mppi(l); |
y=cgetr(l); av=avma; |
y=cgetr(l); av=avma; |
|
|
|
|
GEN |
GEN |
gacos(GEN x, long prec) |
gacos(GEN x, long prec) |
{ |
{ |
long av,tetpil,l,sx; |
long l, sx; |
|
gpmem_t av, tetpil; |
GEN y,p1; |
GEN y,p1; |
|
|
switch(typ(x)) |
switch(typ(x)) |
Line 355 gacos(GEN x, long prec) |
|
Line 354 gacos(GEN x, long prec) |
|
void |
void |
gacosz(GEN x, GEN y) |
gacosz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gacosz"); |
if (!prec) err(infprecer,"gacosz"); |
gaffect(gacos(x,prec),y); avma=av; |
gaffect(gacos(x,prec),y); avma=av; |
Line 377 mparg(GEN x, GEN y) |
|
Line 377 mparg(GEN x, GEN y) |
|
sx=signe(x); sy=signe(y); |
sx=signe(x); sy=signe(y); |
if (!sy) |
if (!sy) |
{ |
{ |
if (sx>0) |
if (sx>0) return realzero_bit(expo(y) - expo(x)); |
{ |
|
theta=cgetr(3); theta[1]=y[1]-expo(x); |
|
theta[2]=0; return theta; |
|
} |
|
return mppi(lg(x)); |
return mppi(lg(x)); |
} |
} |
prec = lg(y); if (prec<lg(x)) prec = lg(x); |
prec = lg(y); if (prec<lg(x)) prec = lg(x); |
Line 423 rfix(GEN x,long prec) |
|
Line 419 rfix(GEN x,long prec) |
|
static GEN |
static GEN |
sarg(GEN x, GEN y, long prec) |
sarg(GEN x, GEN y, long prec) |
{ |
{ |
long av=avma; |
gpmem_t av=avma; |
x = rfix(x,prec); y = rfix(y,prec); |
x = rfix(x,prec); y = rfix(y,prec); |
return gerepileupto(av,mparg(x,y)); |
return gerepileupto(av,mparg(x,y)); |
} |
} |
|
|
garg(GEN x, long prec) |
garg(GEN x, long prec) |
{ |
{ |
GEN p1; |
GEN p1; |
long av,tx=typ(x),tetpil; |
long tx=typ(x); |
|
gpmem_t av, tetpil; |
|
|
if (gcmp0(x)) err(talker,"zero argument in garg"); |
if (gcmp0(x)) err(talker,"zero argument in garg"); |
switch(tx) |
switch(tx) |
Line 458 garg(GEN x, long prec) |
|
Line 455 garg(GEN x, long prec) |
|
|
|
/********************************************************************/ |
/********************************************************************/ |
/** **/ |
/** **/ |
/** FONCTION COSINUS HYPERBOLIQUE **/ |
/** HYPERBOLIC COSINE **/ |
/** **/ |
/** **/ |
/********************************************************************/ |
/********************************************************************/ |
|
|
static GEN |
static GEN |
mpch(GEN x) |
mpch(GEN x) |
{ |
{ |
long l,av; |
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
|
if (gcmp0(x)) return gaddsg(1,x); |
if (gcmp0(x)) return gaddsg(1,x); |
|
|
l=lg(x); y=cgetr(l); av=avma; |
y = cgetr(lg(x)); av = avma; |
p1=mpexp(x); p1 = addrr(p1, divsr(1,p1)); |
p1 = mpexp(x); p1 = addrr(p1, ginv(p1)); |
setexpo(p1, expo(p1)-1); |
setexpo(p1, expo(p1)-1); |
affrr(p1,y); avma=av; return y; |
affrr(p1, y); avma = av; return y; |
} |
} |
|
|
GEN |
GEN |
gch(GEN x, long prec) |
gch(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av; |
GEN p1; |
GEN p1; |
|
|
switch(typ(x)) |
switch(typ(x)) |
Line 487 gch(GEN x, long prec) |
|
Line 484 gch(GEN x, long prec) |
|
case t_REAL: |
case t_REAL: |
return mpch(x); |
return mpch(x); |
|
|
|
case t_SER: |
|
if (gcmp0(x) && valp(x) == 0) return gcopy(x); |
case t_COMPLEX: |
case t_COMPLEX: |
av=avma; p1=gexp(x,prec); |
av = avma; p1 = gexp(x,prec); p1 = gadd(p1, ginv(p1)); |
p1=gadd(p1,ginv(p1)); tetpil=avma; |
return gerepileupto(av, gmul2n(p1,-1)); |
return gerepile(av,tetpil,gmul2n(p1,-1)); |
|
|
|
case t_SER: |
|
av=avma; p1=gexp(x,prec); p1=gadd(p1,gdivsg(1,p1)); |
|
tetpil=avma; return gerepile(av,tetpil,gmul2n(p1,-1)); |
|
|
|
case t_INTMOD: case t_PADIC: |
case t_INTMOD: case t_PADIC: |
err(typeer,"gch"); |
err(typeer,"gch"); |
} |
} |
Line 505 gch(GEN x, long prec) |
|
Line 499 gch(GEN x, long prec) |
|
void |
void |
gchz(GEN x, GEN y) |
gchz(GEN x, GEN y) |
{ |
{ |
long av=avma,prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gchz"); |
if (!prec) err(infprecer,"gchz"); |
gaffect(gch(x,prec),y); avma=av; |
gaffect(gch(x,prec),y); avma=av; |
Line 513 gchz(GEN x, GEN y) |
|
Line 508 gchz(GEN x, GEN y) |
|
|
|
/********************************************************************/ |
/********************************************************************/ |
/** **/ |
/** **/ |
/** FONCTION SINUS HYPERBOLIQUE **/ |
/** HYPERBOLIC SINE **/ |
/** **/ |
/** **/ |
/********************************************************************/ |
/********************************************************************/ |
|
|
static GEN |
static GEN |
mpsh(GEN x) |
mpsh(GEN x) |
{ |
{ |
long l,av; |
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
|
if (!signe(x)) |
if (!signe(x)) return realzero_bit(expo(x)); |
{ |
y = cgetr(lg(x)); av = avma; |
y=cgetr(3); y[1]=x[1]; y[2]=0; return y; |
p1 = mpexp(x); p1 = addrr(p1, divsr(-1,p1)); |
} |
|
l=lg(x); y=cgetr(l); av=avma; |
|
p1=mpexp(x); p1 = addrr(p1, divsr(-1,p1)); |
|
setexpo(p1, expo(p1)-1); |
setexpo(p1, expo(p1)-1); |
affrr(p1,y); avma=av; return y; |
affrr(p1,y); avma = av; return y; |
} |
} |
|
|
GEN |
GEN |
gsh(GEN x, long prec) |
gsh(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av; |
GEN p1; |
GEN p1; |
|
|
switch(typ(x)) |
switch(typ(x)) |
Line 544 gsh(GEN x, long prec) |
|
Line 536 gsh(GEN x, long prec) |
|
case t_REAL: |
case t_REAL: |
return mpsh(x); |
return mpsh(x); |
|
|
|
case t_SER: |
|
if (gcmp0(x) && valp(x) == 0) return gcopy(x); |
case t_COMPLEX: |
case t_COMPLEX: |
av=avma; p1=gexp(x,prec); |
av = avma; p1 = gexp(x,prec); p1 = gsub(p1, ginv(p1)); |
p1=gsub(p1,ginv(p1)); tetpil=avma; |
return gerepileupto(av, gmul2n(p1,-1)); |
return gerepile(av,tetpil,gmul2n(p1,-1)); |
|
|
|
case t_SER: |
|
if (gcmp0(x)) return gcopy(x); |
|
|
|
av=avma; p1=gexp(x,prec); p1=gsub(p1,gdivsg(1,p1)); |
|
tetpil=avma; return gerepile(av,tetpil,gmul2n(p1,-1)); |
|
|
|
case t_INTMOD: case t_PADIC: |
case t_INTMOD: case t_PADIC: |
err(typeer,"gsh"); |
err(typeer,"gsh"); |
} |
} |
Line 564 gsh(GEN x, long prec) |
|
Line 551 gsh(GEN x, long prec) |
|
void |
void |
gshz(GEN x, GEN y) |
gshz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gshz"); |
if (!prec) err(infprecer,"gshz"); |
gaffect(gsh(x,prec),y); avma=av; |
gaffect(gsh(x,prec),y); avma=av; |
Line 579 gshz(GEN x, GEN y) |
|
Line 567 gshz(GEN x, GEN y) |
|
static GEN |
static GEN |
mpth(GEN x) |
mpth(GEN x) |
{ |
{ |
long l,av; |
long l; |
|
gpmem_t av; |
GEN y,p1,p2; |
GEN y,p1,p2; |
|
|
if (!signe(x)) |
if (!signe(x)) return realzero_bit(expo(x)); |
{ |
|
y=cgetr(3); y[1]=x[1]; y[2]=0; |
|
return y; |
|
} |
|
l=lg(x); y=cgetr(l); av=avma; |
l=lg(x); y=cgetr(l); av=avma; |
|
|
p1=cgetr(l+1); affrr(x,p1); |
p1=cgetr(l+1); affrr(x,p1); |
|
|
GEN |
GEN |
gth(GEN x, long prec) |
gth(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av, tetpil; |
GEN p1,p2,p3; |
GEN p1,p2,p3; |
|
|
switch(typ(x)) |
switch(typ(x)) |
Line 629 gth(GEN x, long prec) |
|
Line 614 gth(GEN x, long prec) |
|
void |
void |
gthz(GEN x, GEN y) |
gthz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gthz"); |
if (!prec) err(infprecer,"gthz"); |
gaffect(gth(x,prec),y); avma=av; |
gaffect(gth(x,prec),y); avma=av; |
Line 645 gthz(GEN x, GEN y) |
|
Line 631 gthz(GEN x, GEN y) |
|
static GEN |
static GEN |
mpash(GEN x) |
mpash(GEN x) |
{ |
{ |
long s=signe(x),av; |
long s=signe(x); |
|
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
|
y=cgetr(lg(x)); av=avma; |
y=cgetr(lg(x)); av=avma; |
|
|
GEN |
GEN |
gash(GEN x, long prec) |
gash(GEN x, long prec) |
{ |
{ |
long av,tetpil,sx,sy,sz; |
long sx, sy, sz; |
|
gpmem_t av, tetpil; |
GEN y,p1; |
GEN y,p1; |
|
|
if (gcmp0(x)) return gcopy(x); |
if (gcmp0(x)) return gcopy(x); |
Line 699 gash(GEN x, long prec) |
|
Line 687 gash(GEN x, long prec) |
|
void |
void |
gashz(GEN x, GEN y) |
gashz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gashz"); |
if (!prec) err(infprecer,"gashz"); |
gaffect(gash(x,prec),y); avma=av; |
gaffect(gash(x,prec),y); avma=av; |
Line 714 gashz(GEN x, GEN y) |
|
Line 703 gashz(GEN x, GEN y) |
|
static GEN |
static GEN |
mpach(GEN x) |
mpach(GEN x) |
{ |
{ |
long l,av; |
long l; |
|
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
|
l=lg(x); y=cgetr(l); av=avma; |
l=lg(x); y=cgetr(l); av=avma; |
|
|
GEN |
GEN |
gach(GEN x, long prec) |
gach(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
long v; |
|
|
switch(typ(x)) |
switch(typ(x)) |
{ |
{ |
case t_REAL: |
case t_REAL: |
if (gcmpgs(x,1)>=0) return mpach(x); |
if (gcmpgs(x,1) >= 0) return mpach(x); |
|
|
y=cgetg(3,t_COMPLEX); |
y = cgetg(3,t_COMPLEX); |
if (gcmpgs(x,-1)>=0) |
if (gcmpgs(x,-1) >= 0) |
{ |
{ |
y[2]=lmpacos(x); y[1]=zero; |
y[1] = zero; |
return y; |
y[2] = lmpacos(x); return y; |
} |
} |
av=avma; p1=mpach(gneg_i(x)); tetpil=avma; |
av = avma; |
y[1]=lpile(av,tetpil,gneg(p1)); |
y[1] = lpileupto(av, gneg(mpach(gneg_i(x)))); |
y[2]=lmppi(lg(x)); |
y[2] = lmppi(lg(x)); return y; |
return y; |
|
|
|
case t_COMPLEX: |
case t_COMPLEX: |
av=avma; p1=gaddsg(-1,gsqr(x)); |
av = avma; p1 = gaddsg(-1,gsqr(x)); |
p1=gadd(x,gsqrt(p1,prec)); tetpil=avma; |
p1 = gadd(x, gsqrt(p1,prec)); /* x + sqrt(x^2-1) */ |
y=glog(p1,prec); |
y = glog(p1,prec); |
if (signe(y[2])<0) { tetpil=avma; y=gneg(y); } |
if (signe(y[2]) < 0) y = gneg(y); |
return gerepile(av,tetpil,y); |
return gerepileupto(av, y); |
|
|
case t_SER: |
case t_SER: |
av=avma; if (valp(x)<0) err(negexper,"gach"); |
av = avma; v = valp(x); |
p1=gdiv(derivser(x),gsqrt(gsubgs(gsqr(x),1),prec)); |
if (v < 0) err(negexper,"gach"); |
y=integ(p1,varn(x)); |
if (gcmp0(x)) |
if (!valp(x) && gcmp1((GEN)x[2])) return gerepileupto(av,y); |
|
if (valp(x)) |
|
{ |
{ |
p1=cgetg(3,t_COMPLEX); p1[1]=zero; p1[2]=lmppi(prec); |
if (!v) return gcopy(x); |
setexpo(p1[2],0); |
return gerepileupto(av, gadd(x, PiI2n(prec,-1))); |
} |
} |
else p1=gach((GEN)x[2],prec); |
p1 = gdiv(derivser(x), gsqrt(gsubgs(gsqr(x),1),prec)); |
tetpil=avma; return gerepile(av,tetpil,gadd(p1,y)); |
y = integ(p1, varn(x)); |
|
if (v) |
|
p1 = PiI2n(prec, -1); /* I Pi/2 */ |
|
else |
|
{ |
|
p1 = (GEN)x[2]; |
|
if (gcmp1(p1)) return gerepileupto(av,y); |
|
p1 = gach(p1, prec); |
|
} |
|
return gerepileupto(av, gadd(p1,y)); |
|
|
case t_INTMOD: case t_PADIC: |
case t_INTMOD: case t_PADIC: |
err(typeer,"gach"); |
err(typeer,"gach"); |
Line 778 gach(GEN x, long prec) |
|
Line 775 gach(GEN x, long prec) |
|
void |
void |
gachz(GEN x, GEN y) |
gachz(GEN x, GEN y) |
{ |
{ |
long av=avma,prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gachz"); |
if (!prec) err(infprecer,"gachz"); |
gaffect(gach(x,prec),y); avma=av; |
gaffect(gach(x,prec),y); avma=av; |
Line 790 gachz(GEN x, GEN y) |
|
Line 788 gachz(GEN x, GEN y) |
|
/** **/ |
/** **/ |
/********************************************************************/ |
/********************************************************************/ |
|
|
|
/* |x| < 1 */ |
static GEN |
static GEN |
mpath(GEN x) |
mpath(GEN x) |
{ |
{ |
long av; |
gpmem_t av; |
GEN y,p1; |
GEN y,p1; |
|
|
if (!signe(x)) |
if (!signe(x)) return realzero_bit(expo(x)); |
{ |
|
y=cgetr(3); y[1]=x[1]; y[2]=0; |
|
return y; |
|
} |
|
y=cgetr(lg(x)); av=avma; |
y=cgetr(lg(x)); av=avma; |
p1 = addrs(divsr(2,subsr(1,x)),-1); |
p1 = addrs(divsr(2,subsr(1,x)),-1); |
affrr(mplog(p1), y); avma=av; |
affrr(mplog(p1), y); avma=av; |
|
|
GEN |
GEN |
gath(GEN x, long prec) |
gath(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av, tetpil; |
GEN y,p1; |
GEN y,p1; |
|
|
switch(typ(x)) |
switch(typ(x)) |
Line 847 gath(GEN x, long prec) |
|
Line 842 gath(GEN x, long prec) |
|
void |
void |
gathz(GEN x, GEN y) |
gathz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gathz"); |
if (!prec) err(infprecer,"gathz"); |
gaffect(gath(x,prec),y); avma=av; |
gaffect(gath(x,prec),y); avma=av; |
Line 863 gathz(GEN x, GEN y) |
|
Line 859 gathz(GEN x, GEN y) |
|
void |
void |
mpbern(long nb, long prec) |
mpbern(long nb, long prec) |
{ |
{ |
long n,m,i,j,d,d1,d2,l,av,av2,code0; |
long n, m, i, j, d, d1, d2, l, code0; |
|
gpmem_t av, av2; |
GEN p1,p2, B; |
GEN p1,p2, B; |
|
|
if (nb < 0) nb = 0; |
if (nb < 0) nb = 0; |
Line 888 mpbern(long nb, long prec) |
|
Line 885 mpbern(long nb, long prec) |
|
{ |
{ |
fprintferr("caching Bernoulli numbers 2*%ld to 2*%ld, prec = %ld\n", |
fprintferr("caching Bernoulli numbers 2*%ld to 2*%ld, prec = %ld\n", |
i,nb,prec); |
i,nb,prec); |
timer2(); |
(void)timer2(); |
} |
} |
|
|
p2 = p1; av2=avma; |
p2 = p1; av2=avma; |
Line 926 bernreal(long n, long prec) |
|
Line 923 bernreal(long n, long prec) |
|
{ |
{ |
GEN B; |
GEN B; |
|
|
if (n==1) { B=cgetr(prec); affsr(-1,B); setexpo(B,-1); return B; } |
if (n==1) { B = stor(-1, prec); setexpo(B,-1); return B; } |
if (n<0 || n&1) return gzero; |
if (n<0 || n&1) return gzero; |
n >>= 1; mpbern(n+1,prec); B=cgetr(prec); |
n >>= 1; mpbern(n+1,prec); B=cgetr(prec); |
affrr(bern(n),B); return B; |
affrr(bern(n),B); return B; |
Line 936 bernreal(long n, long prec) |
|
Line 933 bernreal(long n, long prec) |
|
static GEN |
static GEN |
bernfracspec(long k) |
bernfracspec(long k) |
{ |
{ |
long n,av,lim, K = k+1; |
ulong n, K = k+1; |
GEN s,c,N,h; |
gpmem_t av, lim; |
|
GEN s, c, N, b; |
|
|
c = N = stoi(K); s = gun; h = gzero; |
c = N = utoi(K); s = gun; b = gzero; |
av = avma; lim = stack_lim(av,2); |
av = avma; lim = stack_lim(av,2); |
for (n=2; ; n++) |
for (n=2; ; n++) /* n <= k+1 */ |
{ |
{ |
c = gdivgs(gmulgs(c,n-k-2),n); |
c = diviiexact(muliu(c,k+2-n), utoi(n)); |
h = gadd(h, gdivgs(gmul(c,s), n)); |
if (n & 1) setsigne(c, 1); else setsigne(c, -1); |
if (n==K) return gerepileupto(av,h); |
/* c = (-1)^(n-1) binomial(k+1, n), s = 1^k + ... + (n-1)^k */ |
N[2] = n; s = addii(s, gpuigs(N,k)); |
|
|
b = gadd(b, gdivgs(mulii(c,s), n)); |
|
if (n == K) return gerepileupto(av, b); |
|
|
|
N[2] = n; s = addii(s, gpowgs(N,k)); |
if (low_stack(lim, stack_lim(av,2))) |
if (low_stack(lim, stack_lim(av,2))) |
{ |
{ |
GEN *gptr[3]; gptr[0]=&c; gptr[1]=&h; gptr[2]=&s; |
|
if (DEBUGMEM>1) err(warnmem,"bernfrac"); |
if (DEBUGMEM>1) err(warnmem,"bernfrac"); |
gerepilemany(av,gptr,3); |
gerepileall(av,3, &c,&b,&s); |
} |
} |
} |
} |
} |
} |
|
|
bernfrac(long k) |
bernfrac(long k) |
{ |
{ |
if (!k) return gun; |
if (!k) return gun; |
if (k==1) return gneg(ghalf); |
if (k == 1) return gneg(ghalf); |
if (k<0 || k&1) return gzero; |
if (k < 0 || k & 1) return gzero; |
return bernfracspec(k); |
return bernfracspec(k); |
} |
} |
|
|
static GEN |
|
bernvec2(long k) |
|
{ |
|
GEN B = cgetg(k+2,t_VEC); |
|
long i; |
|
|
|
for (i=1; i<=k; i++) |
|
B[i+1]=(long)bernfracspec(i<<1); |
|
B[1]=un; return B; |
|
} |
|
|
|
/* mpbern as exact fractions */ |
/* mpbern as exact fractions */ |
GEN |
GEN |
bernvec(long nb) |
bernvec(long nb) |
{ |
{ |
long n,m,i,j,d1,d2,av,tetpil; |
GEN y = cgetg(nb+2,t_VEC); |
GEN p1,y; |
long n, i; |
|
|
if (nb < 300) return bernvec2(nb); |
if (nb > 46340 && BITS_IN_LONG == 32) err(impl, "bernvec for n > 46340"); |
|
|
y=cgetg(nb+2,t_VEC); y[1]=un; |
y[1] = un; |
for (i=1; i<=nb; i++) |
for (n = 1; n <= nb; n++) |
{ |
{ /* compute y[n+1] = B_{2n} */ |
av=avma; p1=gzero; |
gpmem_t av = avma; |
n=8; m=5; d1=i-1; d2=2*i-3; |
GEN b = gmul2n(stoi(1-2*n), -1); /* 1 + (2n+1)B_1 = (1-2n) /2 */ |
for (j=d1; j>0; j--) |
GEN c = gun; |
{ |
ulong u1 = 2*n + 1, u2 = n, d1 = 1, d2 = 1; |
p1 = gmulsg(n*m, gadd(p1,(GEN)y[j+1])); |
|
p1 = gdivgs(p1, d1*d2); |
for (i = 1; i < n; i++) |
n+=4; m+=2; d1--; d2-=2; |
{ |
|
c = diviiexact(muliu(c, u1*u2), utoi(d1*d2)); /* = binomial(2n+1, 2*i) */ |
|
b = gadd(b, gmul(c, (GEN)y[i+1])); |
|
u1 -= 2; u2--; d1++; d2 += 2; |
} |
} |
p1 = gsubsg(1,gdivgs(gaddsg(1,p1),2*i+1)); |
y[n+1] = lpileupto(av, gdivgs(b, -(1+2*n))); |
tetpil=avma; p1 = gmul2n(p1,-2*i); |
|
y[i+1] = lpile(av,tetpil,p1); |
|
} |
} |
return y; |
return y; |
} |
} |
|
|
mpgamma(GEN x) |
mpgamma(GEN x) |
{ |
{ |
GEN y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
GEN y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
long l,l1,l2,u,i,k,e,s,sx,n,p,av,av1; |
long l, l1, l2, u, i, k, e, s, sx, n, p; |
|
gpmem_t av, av1; |
double alpha,beta,dk; |
double alpha,beta,dk; |
|
|
sx=signe(x); if (!sx) err(gamer2); |
sx=signe(x); if (!sx) err(gamer2); |
|
|
cxgamma(GEN x, long prec) |
cxgamma(GEN x, long prec) |
{ |
{ |
GEN y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
GEN y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
long l,l1,l2,u,i,k,e,s,n,p,av,av1; |
long l, l1, l2, u, i, k, e, s, n, p; |
|
gpmem_t av, av1; |
double alpha,beta,dk; |
double alpha,beta,dk; |
|
|
if (gcmp0((GEN)x[2])) return ggamma((GEN)x[1],prec); |
if (gcmp0((GEN)x[2])) return ggamma((GEN)x[1],prec); |
|
|
dnorm(double s, double t) { return s*s + t*t; } |
dnorm(double s, double t) { return s*s + t*t; } |
|
|
GEN |
GEN |
trans_fix_arg(long *prec, GEN *s0, GEN *sig, long *av, GEN *res) |
trans_fix_arg(long *prec, GEN *s0, GEN *sig, gpmem_t *av, GEN *res) |
{ |
{ |
GEN s, p1; |
GEN s, p1; |
long l; |
long l; |
|
|
gammanew(GEN s0, long la, long prec) |
gammanew(GEN s0, long la, long prec) |
{ |
{ |
GEN s, u, a, y, res, tes, sig, invn2, p1, unr, nnx, pitemp; |
GEN s, u, a, y, res, tes, sig, invn2, p1, unr, nnx, pitemp; |
long i, nn, lim, av, av2, avlim; |
long i, lim, nn; |
|
gpmem_t av, av2, avlim; |
int funeq = 0; |
int funeq = 0; |
|
|
if (DEBUGLEVEL) timer2(); |
if (DEBUGLEVEL) (void)timer2(); |
s = trans_fix_arg(&prec,&s0,&sig,&av,&res); |
s = trans_fix_arg(&prec,&s0,&sig,&av,&res); |
|
|
if (signe(sig) <= 0 || expo(sig) < -1) |
if (signe(sig) <= 0 || expo(sig) < -1) |
Line 1278 gammanew(GEN s0, long la, long prec) |
|
Line 1272 gammanew(GEN s0, long la, long prec) |
|
nn = 1; |
nn = 1; |
|
|
if (DEBUGLEVEL) fprintferr("lim, nn: [%ld, %ld]\n",lim,nn); |
if (DEBUGLEVEL) fprintferr("lim, nn: [%ld, %ld]\n",lim,nn); |
if ((ulong)nn >= maxprime()) err(primer1); |
|
} |
} |
prec++; unr = realun(prec); |
prec++; unr = realun(prec); |
|
|
Line 1338 gammanew(GEN s0, long la, long prec) |
|
Line 1331 gammanew(GEN s0, long la, long prec) |
|
GEN |
GEN |
ggamma(GEN x, long prec) |
ggamma(GEN x, long prec) |
{ |
{ |
|
gpmem_t av=avma, tetpil; |
|
long m, ma; |
|
GEN p1,p2,p3; |
|
|
switch(typ(x)) |
switch(typ(x)) |
{ |
{ |
case t_INT: |
case t_INT: |
if (signe(x)<=0) err(gamer2); |
if (signe(x)<=0) err(gamer2); |
return transc(ggamma,x,prec); |
if (cmpis(x,481177) > 0) err(talker,"argument too large in ggamma"); |
|
/* heuristic */ |
|
if (cmpis(x,350 + 70*(prec-2)) > 0) return transc(ggamma,x,prec); |
|
p2 = cgetr(prec); av = avma; |
|
p1 = mpfact(itos(x) - 1); |
|
affir(p1,p2); avma = av; |
|
return p2; |
|
|
case t_REAL: |
case t_REAL: |
return mpgamma(x); |
return mpgamma(x); |
|
|
|
case t_FRAC: |
|
if (cmpis((GEN)x[2],2) == 0) |
|
{ |
|
p2 = cgetr(prec); av = avma; |
|
if (cmpis(mpabs((GEN)x[1]),962354) > 0) |
|
err(talker,"argument too large in ggamma"); |
|
/* heuristic */ |
|
if (cmpis((GEN)x[1],200 + 50*(prec-2)) > 0) |
|
return transc(ggamma,x,prec); |
|
p1 = gsqrt(mppi(prec),prec); |
|
m = itos((GEN)x[1]) - 1; ma = labs(m); |
|
p3 = gmul2n(divii(mpfact(ma),mpfact(ma/2)),-ma); |
|
if (m >= 0) affrr(gmul(p3,p1),p2); |
|
else |
|
{ |
|
affrr(gdiv(p1,p3),p2); |
|
if ((m&3) == 2) setsigne(p2,-1); |
|
} |
|
avma = av; |
|
return p2; |
|
} |
|
else return transc(ggamma,x,prec); |
|
|
|
case t_FRACN: |
|
p1 = gred(x); |
|
tetpil = avma; |
|
return gerepile(av,tetpil,ggamma(p1,prec)); |
|
|
case t_COMPLEX: |
case t_COMPLEX: |
return cxgamma(x,prec); |
return cxgamma(x,prec); |
|
|
Line 1364 ggamma(GEN x, long prec) |
|
Line 1395 ggamma(GEN x, long prec) |
|
void |
void |
ggammaz(GEN x, GEN y) |
ggammaz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"ggammaz"); |
if (!prec) err(infprecer,"ggammaz"); |
gaffect(ggamma(x,prec),y); avma=av; |
gaffect(ggamma(x,prec),y); avma=av; |
|
|
mplngamma(GEN x) |
mplngamma(GEN x) |
{ |
{ |
GEN z,y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
GEN z,y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
long l,l1,l2,u,i,k,e,f,s,sx,n,p,av,av1; |
long l, l1, l2, u, i, k, e, f, s, sx, n, p; |
|
gpmem_t av, av1; |
double alpha,beta,dk; |
double alpha,beta,dk; |
|
|
sx=signe(x); if (!sx) err(talker,"zero argument in mplngamma"); |
sx=signe(x); if (!sx) err(talker,"zero argument in mplngamma"); |
Line 1466 mplngamma(GEN x) |
|
Line 1499 mplngamma(GEN x) |
|
} |
} |
/* t_REAL result */ |
/* t_REAL result */ |
y[3] = y[0]; y += 3; |
y[3] = y[0]; y += 3; |
affrr(p4,y); avma = (long)y; return y; |
affrr(p4,y); avma = (gpmem_t)y; return y; |
} |
} |
|
|
static GEN |
static GEN |
cxlngamma(GEN x, long prec) |
cxlngamma(GEN x, long prec) |
{ |
{ |
GEN y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
GEN y,p1,p2,p3,p4,p5,p6,p7,p71,pitemp; |
long l,l1,l2,flag,i,k,e,s,n,p,av,av1; |
long l, l1, l2, flag, i, k, e, s, n, p; |
|
gpmem_t av, av1; |
double alpha,beta,dk; |
double alpha,beta,dk; |
|
|
if (gcmp0((GEN)x[2])) return glngamma((GEN)x[1],prec); |
if (gcmp0((GEN)x[2])) return glngamma((GEN)x[1],prec); |
Line 1581 cxlngamma(GEN x, long prec) |
|
Line 1615 cxlngamma(GEN x, long prec) |
|
GEN |
GEN |
glngamma(GEN x, long prec) |
glngamma(GEN x, long prec) |
{ |
{ |
long i,av,n; |
long i, n; |
GEN y,p1; |
gpmem_t av; |
|
GEN y,p1,p2; |
|
|
switch(typ(x)) |
switch(typ(x)) |
{ |
{ |
case t_INT: |
case t_INT: |
if (signe(x)<=0) err(gamer2); |
if (signe(x)<=0) err(gamer2); |
return transc(glngamma,x,prec); |
p2 = cgetr(prec); av = avma; |
|
/* heuristic */ |
|
if (cmpis(x,200 + 50*(prec-2)) > 0) |
|
return transc(glngamma,x,prec); |
|
p1 = glog(mpfact(itos(x) - 1),prec); |
|
affrr(p1,p2); avma = av; |
|
return p2; |
|
|
case t_REAL: |
case t_REAL: |
return mplngamma(x); |
return mplngamma(x); |
Line 1618 glngamma(GEN x, long prec) |
|
Line 1659 glngamma(GEN x, long prec) |
|
void |
void |
glngammaz(GEN x, GEN y) |
glngammaz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"glngammaz"); |
if (!prec) err(infprecer,"glngammaz"); |
gaffect(glngamma(x,prec),y); avma=av; |
gaffect(glngamma(x,prec),y); avma=av; |
Line 1633 glngammaz(GEN x, GEN y) |
|
Line 1675 glngammaz(GEN x, GEN y) |
|
static GEN |
static GEN |
mpgamd(long x, long prec) |
mpgamd(long x, long prec) |
{ |
{ |
long i,j,a,l,av; |
long i, j, a, l; |
|
gpmem_t av; |
GEN y,p1,p2; |
GEN y,p1,p2; |
|
|
a = labs(x); |
a = labs(x); |
Line 1660 mpgamd(long x, long prec) |
|
Line 1703 mpgamd(long x, long prec) |
|
void |
void |
mpgamdz(long s, GEN y) |
mpgamdz(long s, GEN y) |
{ |
{ |
long av=avma; |
gpmem_t av=avma; |
|
|
affrr(mpgamd(s,lg(y)),y); avma=av; |
affrr(mpgamd(s,lg(y)),y); avma=av; |
} |
} |
Line 1668 mpgamdz(long s, GEN y) |
|
Line 1711 mpgamdz(long s, GEN y) |
|
GEN |
GEN |
ggamd(GEN x, long prec) |
ggamd(GEN x, long prec) |
{ |
{ |
long av,tetpil; |
gpmem_t av, tetpil; |
|
|
switch(typ(x)) |
switch(typ(x)) |
{ |
{ |
Line 1690 ggamd(GEN x, long prec) |
|
Line 1733 ggamd(GEN x, long prec) |
|
void |
void |
ggamdz(GEN x, GEN y) |
ggamdz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"ggamdz"); |
if (!prec) err(infprecer,"ggamdz"); |
gaffect(ggamd(x,prec),y); avma=av; |
gaffect(ggamd(x,prec),y); avma=av; |
Line 1702 ggamdz(GEN x, GEN y) |
|
Line 1746 ggamdz(GEN x, GEN y) |
|
/** **/ |
/** **/ |
/********************************************************************/ |
/********************************************************************/ |
|
|
#if 1 |
GEN |
|
psinew(GEN s0, long prec) |
|
{ |
|
gpmem_t av; |
|
GEN sum,z,a,res,tes,in2,sig,s,unr; |
|
long lim,nn,k; |
|
const long la = 3; |
|
|
|
|
|
if (DEBUGLEVEL>2) (void)timer2(); |
|
s = trans_fix_arg(&prec,&s0,&sig,&av,&res); |
|
if (signe(sig) <= 0) |
|
{ |
|
GEN pi = mppi(prec); |
|
z = gsub(psinew(gsubsg(1,s), prec), gmul(pi, gcotan(gmul(pi,s), prec))); |
|
gaffect(z, res); avma = av; return res; |
|
} |
|
|
|
{ |
|
double ssig = rtodbl(sig); |
|
double st = rtodbl(gimag(s)); |
|
double l; |
|
{ |
|
double rlog, ilog; /* log (s-gamma) */ |
|
dcxlog(ssig - rtodbl(mpeuler(3)), st, &rlog,&ilog); |
|
l = dnorm(rlog,ilog); |
|
} |
|
if (l < 0.000001) l = 0.000001; |
|
l = log(l) / 2.; |
|
lim = 2 + (long)ceil((pariC2*(prec-2) - l) / (2*(1+log((double)la)))); |
|
if (lim < 2) lim = 2; |
|
|
|
l = (2*lim-1)*la / (2.*PI); |
|
l = l*l - st*st; |
|
if (l < 0.) l = 0.; |
|
nn = (long)ceil( sqrt(l) - ssig ); |
|
if (nn < 1) nn = 1; |
|
if (DEBUGLEVEL>2) fprintferr("lim, nn: [%ld, %ld]\n",lim,nn); |
|
} |
|
prec++; unr = realun(prec); /* one extra word of precision */ |
|
|
|
a = gdiv(unr, gaddgs(s, nn)); /* 1 / (s+n) */ |
|
sum = gmul2n(a,-1); |
|
for (k = 0; k < nn; k++) |
|
sum = gadd(sum, gdiv(unr, gaddgs(s, k))); |
|
z = gsub(glog(gaddgs(s, nn), prec), sum); |
|
if (DEBUGLEVEL>2) msgtimer("sum from 0 to N-1"); |
|
|
|
tes = divrs(bernreal(2*lim, prec), 2*lim); |
|
in2 = gsqr(a); |
|
for (k=2*lim-2; k>=2; k-=2) |
|
{ |
|
tes = gadd(gmul(in2,tes), divrs(bernreal(k, prec), k)); |
|
} |
|
if (DEBUGLEVEL>2) msgtimer("Bernoulli sum"); |
|
z = gsub(z, gmul(in2,tes)); |
|
gaffect(z, res); avma = av; return res; |
|
} |
|
|
|
#if 0 |
static GEN |
static GEN |
mppsi(GEN z) /* version p=2 */ |
mppsi(GEN z) /* version p=2 */ |
{ |
{ |
long l,n,k,x,xx,av,av1,tetpil; |
long l, n, k, x, xx; |
|
gpmem_t av, av1, tetpil; |
GEN zk,u,v,a,b; |
GEN zk,u,v,a,b; |
|
|
av=avma; l=lg(z); |
av=avma; l=lg(z); |
x=(long)(1 + (bit_accuracy(l)>>1)*LOG2 + 1.58*rtodbl(absr(z))); |
x=(long)(1 + (bit_accuracy(l)>>1)*LOG2 + 1.58*rtodbl(absr(z))); |
if (expo(z)>=15 || x>46340) err(impl,"psi(x) for x>=29000"); |
if (expo(z)>=15 || x>46340) err(impl,"psi(x) for x>=29000"); |
xx=x*x; n=(long)(1+3.591*x); |
xx=x*x; n=(long)(1+3.591*x); |
affsr(x,a=cgetr(l)); |
a = stor(x, l); |
a = mplog(a); |
a = mplog(a); |
gaffect(a,u=cgetr(l)); |
gaffect(a,u=cgetr(l)); |
gaffsg(1,b=cgetr(l)); |
gaffsg(1,b=cgetr(l)); |
Line 1727 mppsi(GEN z) /* version p=2 */ |
|
Line 1831 mppsi(GEN z) /* version p=2 */ |
|
} |
} |
tetpil=avma; return gerepile(av,tetpil,divrr(u,v)); |
tetpil=avma; return gerepile(av,tetpil,divrr(u,v)); |
} |
} |
#else |
|
static GEN /* by Manfred Radimersky */ |
static GEN /* by Manfred Radimersky */ |
mppsi(GEN z) |
mppsi(GEN z) |
{ |
{ |
|
|
gerepile(head, tail, subrr(s, a)); |
gerepile(head, tail, subrr(s, a)); |
} |
} |
|
|
a = cgetr(len); |
a = stor(0, len); |
affsr(0, a); |
|
x = cgetr(len); |
x = cgetr(len); |
affrr(z, x); |
affrr(z, x); |
tail = avma; |
tail = avma; |
while(cmprs(x, num >> 2) < 0) { |
while(cmprs(x, num >> 2) < 0) { |
gaddz(a, divsr(1, x), a); |
gaddz(a, ginv(x), a); |
gaddgsz(x, 1, x); |
gaddgsz(x, 1, x); |
avma = tail; |
avma = tail; |
} |
} |
|
|
s = mplog(x); |
s = mplog(x); |
gsubz(s, a, s); |
gsubz(s, a, s); |
b = gmul2n(x, 1); |
b = gmul2n(x, 1); |
gsubz(s, divsr(1, b), s); |
gsubz(s, ginv(b), s); |
|
|
mpbern(num, len); |
mpbern(num, len); |
|
|
affsr(-1, a); |
affsr(-1, a); |
gdivgsz(a, 2, a); |
gdivgsz(a, 2, a); |
f = mulrr(x, x); |
f = mulrr(x, x); |
f = divsr(1, f); |
f = ginv(f); |
k = 1; |
k = 1; |
do { |
do { |
gmulz(a, f, a); |
gmulz(a, f, a); |
|
|
|
|
return gerepilecopy(head, s); |
return gerepilecopy(head, s); |
} |
} |
#endif |
|
|
|
#if 1 |
|
static GEN |
static GEN |
cxpsi(GEN z, long prec) /* version p=2 */ |
cxpsi(GEN z, long prec) /* version p=2 */ |
{ |
{ |
long l,n,k,x,xx,av,av1,tetpil; |
long l, n, k, x, xx; |
|
gpmem_t av, av1, tetpil; |
GEN zk,u,v,a,b,p1; |
GEN zk,u,v,a,b,p1; |
|
|
if (gcmp0((GEN)z[2])) return gpsi((GEN)z[1],prec); |
if (gcmp0((GEN)z[2])) return gpsi((GEN)z[1],prec); |
Line 1810 cxpsi(GEN z, long prec) /* version p=2 */ |
|
Line 1910 cxpsi(GEN z, long prec) /* version p=2 */ |
|
} |
} |
tetpil=avma; return gerepile(av,tetpil,gdiv(u,v)); |
tetpil=avma; return gerepile(av,tetpil,gdiv(u,v)); |
} |
} |
#else |
|
GEN |
GEN |
cxpsi(GEN z, long prec) /* by Manfred Radimersky */ |
cxpsi(GEN z, long prec) /* by Manfred Radimersky */ |
{ |
{ |
Line 1877 gpsi(GEN x, long prec) |
|
Line 1976 gpsi(GEN x, long prec) |
|
{ |
{ |
switch(typ(x)) |
switch(typ(x)) |
{ |
{ |
case t_REAL: |
case t_REAL: case t_COMPLEX: |
return mppsi(x); |
return psinew(x,prec); |
|
|
case t_COMPLEX: |
|
return cxpsi(x,prec); |
|
|
|
case t_INTMOD: case t_PADIC: |
case t_INTMOD: case t_PADIC: |
err(typeer,"gpsi"); |
err(typeer,"gpsi"); |
case t_SER: |
case t_SER: |
Line 1894 gpsi(GEN x, long prec) |
|
Line 1990 gpsi(GEN x, long prec) |
|
void |
void |
gpsiz(GEN x, GEN y) |
gpsiz(GEN x, GEN y) |
{ |
{ |
long av=avma, prec = precision(y); |
long prec = precision(y); |
|
gpmem_t av=avma; |
|
|
if (!prec) err(infprecer,"gpsiz"); |
if (!prec) err(infprecer,"gpsiz"); |
gaffect(gpsi(x,prec),y); avma=av; |
gaffect(gpsi(x,prec),y); avma=av; |