=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/p-itv.c,v retrieving revision 1.1 retrieving revision 1.7 diff -u -p -r1.1 -r1.7 --- OpenXM_contrib2/asir2000/engine/p-itv.c 2000/12/22 10:03:28 1.1 +++ OpenXM_contrib2/asir2000/engine/p-itv.c 2009/03/27 14:42:29 1.7 @@ -1,10 +1,10 @@ /* - * $OpenXM: $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/p-itv.c,v 1.6 2005/02/08 18:06:05 saito Exp $ */ #if defined(INTERVAL) #include "ca.h" #include "base.h" -#if PARI +#if defined(PARI) #include "genpari.h" #endif @@ -50,9 +50,12 @@ void istoitv(Num inf, Num sup, Itv *rp) } else { i = inf; } - if ( type ) - NEWItvF((ItvF)c); - else + if ( type ) { +// NEWIntervalBigFloat((IntervalBigFloat)c); + c=MALLOC(sizeof(struct oIntervalBigFloat)); + OID(c)=O_N; + NID(c)=N_IntervalBigFloat; + } else NEWItvP(c); if ( compnum(0,i,s) >= 0 ) { @@ -82,7 +85,7 @@ void additvp(Itv a, Itv b, Itv *c) addnum(0,(Num)a,(Num)b,(Num *)c); else if ( (NID(a) == N_IP) && (NID(b) == N_R ) ||(NID(a) == N_R ) && (NID(b) == N_IP) ) - additvd((Num)a,(Num)b,(ItvD *)c); + additvd((Num)a,(Num)b,(IntervalDouble *)c); else { itvtois(a,&ai,&as); itvtois(b,&bi,&bs); @@ -105,7 +108,7 @@ void subitvp(Itv a, Itv b, Itv *c) subnum(0,(Num)a,(Num)b,(Num *)c); else if ( (NID(a) == N_IP) && (NID(b) == N_R ) ||(NID(a) == N_R ) && (NID(b) == N_IP) ) - subitvd((Num)a,(Num)b,(ItvD *)c); + subitvd((Num)a,(Num)b,(IntervalDouble *)c); else { itvtois(a,&ai,&as); itvtois(b,&bi,&bs); @@ -126,7 +129,7 @@ void mulitvp(Itv a, Itv b, Itv *c) mulnum(0,(Num)a,(Num)b,(Num *)c); else if ( (NID(a) == N_IP) && (NID(b) == N_R ) ||(NID(a) == N_R ) && (NID(b) == N_IP) ) - mulitvd((Num)a,(Num)b,(ItvD *)c); + mulitvd((Num)a,(Num)b,(IntervalDouble *)c); else { itvtois(a,&ai,&as); itvtois(b,&bi,&bs); @@ -208,7 +211,7 @@ void divitvp(Itv a, Itv b, Itv *c) divnum(0,(Num)a,(Num)b,(Num *)c); else if ( (NID(a) == N_IP) && (NID(b) == N_R ) ||(NID(a) == N_R ) && (NID(b) == N_IP) ) - divitvd((Num)a,(Num)b,(ItvD *)c); + divitvd((Num)a,(Num)b,(IntervalDouble *)c); else { itvtois(a,&ai,&as); itvtois(b,&bi,&bs); @@ -259,13 +262,8 @@ void pwritvp(Itv a, Num e, Itv *c) else if ( NID(a) <= N_B ) pwrnum(0,(Num)a,(Num)e,(Num *)c); else if ( !INT(e) ) { -#if PARI && 0 - GEN pa,pe,z; - 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); +#if defined(PARI) && 0 + gpui_ri((Obj)a,(Obj)c,(Obj *)c); #else error("pwritv : can't calculate a fractional power"); #endif @@ -339,22 +337,31 @@ int cmpitvp(Itv a, Itv b) int s,t; if ( !a ) { - if ( !b || (NID(b)<=N_B) ) + if ( !b || (NID(b)<=N_B) ) { return compnum(0,(Num)a,(Num)b); - else - return -1; + } else { + itvtois(b,&bi,&bs); + if ( compnum(0,(Num)a,bs) > 0 ) return 1; + else if ( compnum(0,bi,(Num)a) > 0 ) return -1; + else return 0; + } } else if ( !b ) { - if ( !a || (NID(a)<=N_B) ) + if ( !a || (NID(a)<=N_B) ) { return compnum(0,(Num)a,(Num)b); - else - return initvp((Num)b,a); + } else { + itvtois(a,&ai,&as); + if ( compnum(0,ai,(Num)b) > 0 ) return 1; + else if ( compnum(0,(Num)b,as) > 0 ) return -1; + else return 0; + } } else { itvtois(a,&ai,&as); itvtois(b,&bi,&bs); - s = compnum(0,ai,bi) ; - t = compnum(0,as,bs) ; - if ( !s && !t ) return 0; - else return -1; + s = compnum(0,ai,bs) ; + t = compnum(0,bi,as) ; + if ( s > 0 ) return 1; + else if ( t > 0 ) return -1; + else return 0; } } @@ -362,7 +369,6 @@ void miditvp(Itv a, Num *b) { Num ai,as; Num t; - Q TWO; if ( ! a ) *b = 0; else if ( (NID(a) <= N_B) )