[BACK]Return to strobj.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/strobj.c between version 1.91 and 1.92

version 1.91, 2005/11/02 06:32:44 version 1.92, 2005/11/02 08:22:39
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.90 2005/11/02 05:39:23 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.91 2005/11/02 06:32:44 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 2449  FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand
Line 2449  FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand
   
         if ( IS_ZERO(f2) ) return mkfnode(1,I_FORMULA,ONE);          if ( IS_ZERO(f2) ) return mkfnode(1,I_FORMULA,ONE);
         else if ( IS_ZERO(f1) ) return mkfnode(1,I_FORMULA,0);          else if ( IS_ZERO(f1) ) return mkfnode(1,I_FORMULA,0);
         else if ( fnode_is_one(f2) ) return f1;          else if ( fnode_is_number(f1) ) {
         else if ( fnode_is_number(f1) )  
                 if ( fnode_is_integer(f2) ) {                  if ( fnode_is_integer(f2) ) {
                         pwrnum(0,(Num)eval(f1),(Num)eval(f2),&c);                          if ( fnode_is_one(f2) ) return f1;
                         return mkfnode(1,I_FORMULA,c);                          else {
                                   pwrnum(0,(Num)eval(f1),(Num)eval(f2),&c);
                                   return mkfnode(1,I_FORMULA,c);
                           }
                 } else                  } else
                         return mkfnode(3,I_BOP,pwrfs,f1,f2);                          return mkfnode(3,I_BOP,pwrfs,f1,f2);
         else if ( IS_BINARYPWR(f1) ) {          } else if ( IS_BINARYPWR(f1) ) {
                 b1 = FA1(f1); e1 = FA2(f1);                  b1 = FA1(f1); e1 = FA2(f1);
                 e = fnode_normalize_mul(e1,f2,expand);                  e = fnode_normalize_mul(e1,f2,expand);
                 if ( fnode_is_one(e) )                  if ( fnode_is_one(e) )
                         return b1;                          return b1;
                 else                  else
                         return mkfnode(3,I_BOP,FA0(f1),b1,e);                          return mkfnode(3,I_BOP,FA0(f1),b1,e);
         } else if ( expand && IS_NARYMUL(f1) && fnode_is_integer(f2) ) {          } else if ( expand && IS_NARYMUL(f1) && fnode_is_number(f2)
                   && fnode_is_integer(f2) ) {
                 fnode_coef_body(f1,&c1,&b1);                  fnode_coef_body(f1,&c1,&b1);
                 nf2 = (Num)eval(f2);                  nf2 = (Num)eval(f2);
                 pwrnum(0,(Num)c1,nf2,&c);                  pwrnum(0,(Num)c1,nf2,&c);
Line 2474  FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand
Line 2477  FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand
                 else {                  else {
                         STOQ(-1,q);                          STOQ(-1,q);
                         mone = mkfnode(1,I_FORMULA,q);                          mone = mkfnode(1,I_FORMULA,q);
                           b1 = to_narymul(b1);
                         for ( t0 = 0, n = (NODE)FA1(b1); n; n = NEXT(n) ) {                          for ( t0 = 0, n = (NODE)FA1(b1); n; n = NEXT(n) ) {
                                 inv = mkfnode(3,I_BOP,pwrfs,BDY(n),mone);                                  inv = mkfnode(3,I_BOP,pwrfs,BDY(n),mone);
                                 MKNODE(t1,inv,t0); t0 = t1;                                  MKNODE(t1,inv,t0); t0 = t1;
                         }                          }
                         b1 = mkfnode(2,I_NARYOP,FA0(f1),t0);                          b1 = fnode_node_to_narymul(t0);
                         b = fnode_expand_pwr(b1,-ee);                          b = fnode_expand_pwr(b1,-ee);
                 }                  }
                 if ( fnode_is_one(cc) )                  if ( fnode_is_one(cc) )

Legend:
Removed from v.1.91  
changed lines
  Added in v.1.92

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