Ticket #9620: pari-2.3.5.patch

File pari-2.3.5.patch, 4.2 KB (added by rbk, 3 years ago)
  • pari-2.3.5.p1

    old new  
    182182      gel(y,1) = Pi2n(-1, lg(x)); 
    183183      gel(y,2) = mpach(x); 
    184184      if (sx < 0) 
    185       { 
    186185        setsigne(y[1],-signe(y[1])); 
     186      else 
    187187        setsigne(y[2],-signe(y[2])); 
    188       } 
    189188      return y; 
    190189 
    191190    case t_COMPLEX: 
     
    254253      if (expo(x) < 0) return mpacos(x); 
    255254 
    256255      y = cgetg(3,t_COMPLEX); p1 = mpach(x); 
    257       if (sx < 0) gel(y,1) = mppi(lg(x)); 
    258       else { 
    259         gel(y,1) = gen_0; 
     256      if (sx < 0) { 
     257        gel(y,1) = mppi(lg(x)); 
    260258        setsigne(p1,-signe(p1)); 
    261       } 
     259      } else gel(y,1) = gen_0; 
    262260      gel(y,2) = p1; return y; 
    263261 
    264     case t_COMPLEX: av = avma; 
    265       return gerepilecopy(av, mulcxmI(gach(x,prec))); 
     262    case t_COMPLEX: 
     263      av = avma; 
     264      p1 = gadd(x, gsqrt(gaddsg(-1,gsqr(x)), prec)); /* x + sqrt(x^2-1) */ 
     265      y = glog(p1,prec); 
     266      if (typ(y) == t_COMPLEX && signe(y[2]) > 0) y = gneg(y); 
     267      return gerepilecopy(av, mulcxI(y)); 
    266268 
    267269    case t_INTMOD: case t_PADIC: pari_err(typeer,"gacos"); 
    268270    case t_SER: 
     
    502504} 
    503505/********************************************************************/ 
    504506/**                                                                **/ 
    505 /**                     ARG-HYPERBOLIC SINE                        **/ 
     507/**                     AREA HYPERBOLIC SINE                       **/ 
    506508/**                                                                **/ 
    507509/********************************************************************/ 
    508510 
     
    545547        sx = gsigne(p1); 
    546548        sy = 0; 
    547549      } 
    548       if (sx > 0 || (!sx && sy*sz<=0)) return gerepileupto(av, y); 
    549  
    550       p1 = mppi(prec); if (sy<0) setsigne(p1,-1); 
    551       return gerepileupto(av, gadd(gneg_i(y), pureimag(p1))); 
     550      return gerepileupto(av, y); 
    552551    case t_INTMOD: case t_PADIC: pari_err(typeer,"gash"); 
    553552    default: 
    554553      av = avma; if (!(y = toser_i(x))) break; 
     
    570569} 
    571570/********************************************************************/ 
    572571/**                                                                **/ 
    573 /**                     ARG-HYPERBOLIC COSINE                      **/ 
     572/**                     AREA HYPERBOLIC COSINE                     **/ 
    574573/**                                                                **/ 
    575574/********************************************************************/ 
    576575 
     
    601600      if (absrnz_egal1(x)) { y = cgetimag(); gel(y,2) = mppi(lg(x)); return y; } 
    602601      y = cgetg(3,t_COMPLEX); 
    603602      av = avma; p1 = mpach(x); 
    604       setsigne(p1, -signe(p1)); 
    605603      gel(y,1) = p1; 
    606604      gel(y,2) = mppi(lg(x)); return y; 
    607605 
     
    609607      av = avma;  
    610608      p1 = gadd(x, gsqrt(gaddsg(-1,gsqr(x)), prec)); /* x + sqrt(x^2-1) */ 
    611609      y = glog(p1,prec); 
    612       if (typ(y) == t_COMPLEX && signe(y[2]) < 0) y = gneg(y); 
     610      if (signe(y[1]) < 0) y = gneg(y); 
    613611      return gerepileupto(av, y); 
    614612 
    615613    case t_INTMOD: case t_PADIC: pari_err(typeer,"gach"); 
     
    640638} 
    641639/********************************************************************/ 
    642640/**                                                                **/ 
    643 /**                     ARG-HYPERBOLIC TANGENT                     **/ 
     641/**                     AREA HYPERBOLIC TANGENT                    **/ 
    644642/**                                                                **/ 
    645643/********************************************************************/ 
    646644 
     
    659657GEN 
    660658gath(GEN x, long prec) 
    661659{ 
     660  long sx; 
    662661  pari_sp av; 
    663662  GEN a, y, p1; 
    664663 
    665664  switch(typ(x)) 
    666665  { 
    667666    case t_REAL: 
    668       if (!signe(x)) return real_0_bit(expo(x)); 
     667      sx = signe(x); 
     668      if (!sx) return real_0_bit(expo(x)); 
    669669      if (expo(x) < 0) return mpath(x); 
    670670 
    671671      y = cgetg(3,t_COMPLEX); 
     
    675675      p1 = logr_abs(p1); 
    676676      setexpo(p1, expo(p1)-1); 
    677677      gel(y,1) = gerepileuptoleaf(av, p1); 
    678       gel(y,2) = Pi2n(-1, lg(x)); return y; 
     678      gel(y,2) = Pi2n(-1, lg(x)); 
     679      if (sx > 0) 
     680        setsigne(y[2],-signe(y[2])); 
     681      return y; 
    679682 
    680683    case t_COMPLEX: 
    681684      av = avma; p1 = glog( gaddgs(gdivsg(2,gsubsg(1,x)),-1), prec );