[BACK]Return to f-itv.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/f-itv.c between version 1.5 and 1.7

version 1.5, 2003/10/20 07:18:42 version 1.7, 2009/03/27 14:42:29
Line 1 
Line 1 
 /*  /*
  * $OpenXM: OpenXM_contrib2/asir2000/engine/f-itv.c,v 1.4 2003/07/25 12:34:47 kondoh Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/f-itv.c,v 1.6 2005/01/11 07:12:51 saito Exp $
 */  */
 #if defined(INTERVAL)  #if defined(INTERVAL)
 #include "ca.h"  #include "ca.h"
Line 7 
Line 7 
 #if defined(PARI)  #if defined(PARI)
 #include "genpari.h"  #include "genpari.h"
 #include "itv-pari.h"  #include "itv-pari.h"
 extern long prec;  long get_pariprec();
 #endif  #endif
   
 void ToBf(Num a, BF *rp)  void ToBf(Num a, BF *rp)
Line 24  void ToBf(Num a, BF *rp)
Line 24  void ToBf(Num a, BF *rp)
                 case N_Q:                  case N_Q:
                         ltop = avma;                          ltop = avma;
                         ritopa_i(NM((Q)a), SGN((Q)a), &pa);                          ritopa_i(NM((Q)a), SGN((Q)a), &pa);
                         pb = cgetr(prec);                          pb = cgetr(get_pariprec());
                         mpaff(pa, pb);                          mpaff(pa, pb);
                         if ( INT((Q)a) ) {                          if ( INT((Q)a) ) {
                                 lbot = avma;                                  lbot = avma;
Line 35  void ToBf(Num a, BF *rp)
Line 35  void ToBf(Num a, BF *rp)
                         } else {                          } else {
                                 patori(pb, &bn);                                  patori(pb, &bn);
                                 ritopa_i(DN((Q)a), 1, &pa);                                  ritopa_i(DN((Q)a), 1, &pa);
                                 pb = cgetr(prec);                                  pb = cgetr(get_pariprec());
                                 mpaff(pa, pb);                                  mpaff(pa, pb);
                                 lbot = avma;                                  lbot = avma;
                                 pb = gerepile(ltop, lbot, pb);                                  pb = gerepile(ltop, lbot, pb);
Line 135  printexpr(CO, bi);
Line 135  printexpr(CO, bi);
 printexpr(CO, bs);  printexpr(CO, bs);
 #endif  #endif
   
 #if 1  
                 addnum(0,ai,bi,&inf);                  addnum(0,ai,bi,&inf);
                 addnum(0,as,bs,&sup);                  addnum(0,as,bs,&sup);
                 istoitv(inf,sup,(Itv *)&tmp);                  istoitv(inf,sup,(Itv *)&tmp);
                 addulp((IntervalBigFloat)tmp, c);                  addulp((IntervalBigFloat)tmp, c);
                 return;                  return;
 #else  
                 ltop = avma;  
                 ritopa(ai,&pa);  
                 ritopa(bi,&pb);  
                 lbot = avma;  
                 z = gerepile(ltop,lbot,PariAddDown(pa,pb));  
                 patori(z,&inf); cgiv(z);  
   
         /* MUST check if ai, as, bi, bs are bigfloat. */  
   
                 /*  as + bs = ( - ( (-as) + (-bs) ) ) */  
                 chsgnbf(as,&mas);  
                 chsgnbf(bs,&mbs);  
                 ltop = avma;  
                 ritopa(mas,&pa);  
                 ritopa(mbs,&pb);  
                 lbot = avma;  
                 z = gerepile(ltop,lbot,PariAddDown(pa,pb));  
                 patori(z,&tmp); cgiv(z);  
   
                 chsgnbf(tmp,&sup);  
                 istoitv(inf,sup,c);  
 #endif  
         }          }
 }  }
   
Line 185  void subitvf(IntervalBigFloat a, IntervalBigFloat b, I
Line 161  void subitvf(IntervalBigFloat a, IntervalBigFloat b, I
                 ToBf(inf, (BF *)&ai); ToBf(sup, (BF *)&as);                  ToBf(inf, (BF *)&ai); ToBf(sup, (BF *)&as);
                 itvtois((Itv)b,&inf,&sup);                  itvtois((Itv)b,&inf,&sup);
                 ToBf(inf, (BF *)&bi); ToBf(sup, (BF *)&bs);                  ToBf(inf, (BF *)&bi); ToBf(sup, (BF *)&bs);
 #if 1  
                 subnum(0,ai,bs,&inf);                  subnum(0,ai,bs,&inf);
                 subnum(0,as,bi,&sup);                  subnum(0,as,bi,&sup);
                 istoitv(inf,sup,(Itv *)&tmp);                  istoitv(inf,sup,(Itv *)&tmp);
                 addulp((IntervalBigFloat)tmp, c);                  addulp((IntervalBigFloat)tmp, c);
 #else  
   
 /* MUST check if ai, as, bi, bs are bigfloat. */  
                 /* ai - bs = ai + (-bs)  */  
                 chsgnbf(bs,&mbs);  
                 ltop = avma;  
                 ritopa(ai,&pa);  
                 ritopa(mbs,&pb);  
                 lbot = avma;  
                 z = gerepile(ltop,lbot,PariAddDown(pa,pb));  
                 patori(z,&inf); cgiv(z);  
   
                 /* as - bi = ( - ( bi + (-as) ) ) */  
                 chsgnbf(as,&mas);  
                 ltop = avma;  
                 ritopa(mas,&pa);  
                 ritopa(bi,&pb);  
                 lbot = avma;  
                 z = gerepile(ltop,lbot,PariAddDown(pa,pb));  
                 patori(z,&tmp); cgiv(z);  
   
                 chsgnbf(tmp,&sup);  
                 istoitv(inf,sup,c);  
 #endif  
         }          }
 }  }
   
Line 369  void pwritvf(Itv a, Num e, Itv *c)
Line 320  void pwritvf(Itv a, Num e, Itv *c)
                 pwrnum(0,(Num)a,e,(Num *)c);                  pwrnum(0,(Num)a,e,(Num *)c);
         else if ( !INT(e) ) {          else if ( !INT(e) ) {
 #if defined(PARI) && 0  #if defined(PARI) && 0
                 GEN pa,pe,z;                  gpui_ri((Obj)a,(Obj)c,(Obj *)c);
                 int ltop,lbot;  
   
                 ltop = avma; ritopa(a,&pa); ritopa(e,&pe); lbot = avma;  
                 z = gerepile(ltop,lbot,gpui(pa,pe,prec));  
                 patori(z,c); cgiv(z);  
 #else  #else
                 error("pwritv : can't calculate a fractional power");                  error("pwritv : can't calculate a fractional power");
 #endif  #endif

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.7

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>