Ticket #9620: pari-2.3.5.patch

File pari-2.3.5.patch, 4.2 KB (added by rbk, 11 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 );