version 1.76, 2005/10/15 02:34:13 |
version 1.77, 2005/10/15 07:40:59 |
|
|
* 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.75 2005/10/15 01:10:15 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.76 2005/10/15 02:34:13 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 64 struct TeXSymbol { |
|
Line 64 struct TeXSymbol { |
|
}; |
}; |
|
|
#define OPNAME(f) (((ARF)FA0(f))->name[0]) |
#define OPNAME(f) (((ARF)FA0(f))->name[0]) |
|
#define IS_ZERO(f) (((f)->id==I_FORMULA) && FA0(f)==0 ) |
#define IS_BINARYPWR(f) (((f)->id==I_BOP) &&(OPNAME(f)=='^')) |
#define IS_BINARYPWR(f) (((f)->id==I_BOP) &&(OPNAME(f)=='^')) |
#define IS_NARYADD(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='+')) |
#define IS_NARYADD(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='+')) |
#define IS_NARYMUL(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='*')) |
#define IS_NARYMUL(f) (((f)->id==I_NARYOP) &&(OPNAME(f)=='*')) |
Line 2031 int fnode_is_integer(FNODE f) |
|
Line 2032 int fnode_is_integer(FNODE f) |
|
} |
} |
} |
} |
|
|
int fnode_is_zero(FNODE f) |
|
{ |
|
Q n; |
|
|
|
n = eval(f); |
|
if ( !n ) return 1; |
|
else return 0; |
|
} |
|
|
|
int fnode_is_nonnegative_integer(FNODE f) |
int fnode_is_nonnegative_integer(FNODE f) |
{ |
{ |
Q n; |
Q n; |
Line 2216 FNODE fnode_normalize_add(FNODE f1,FNODE f2,int expand |
|
Line 2208 FNODE fnode_normalize_add(FNODE f1,FNODE f2,int expand |
|
int s; |
int s; |
Num c1,c2,c; |
Num c1,c2,c; |
|
|
if ( fnode_is_zero(f1) ) return f2; |
if ( IS_ZERO(f1) ) return f2; |
else if ( fnode_is_zero(f2) ) return f1; |
else if ( IS_ZERO(f2) ) return f1; |
f1 = to_naryadd(f1); f2 = to_naryadd(f2); |
f1 = to_naryadd(f1); f2 = to_naryadd(f2); |
n1 = (NODE)FA1(f1); n2 = (NODE)FA1(f2); |
n1 = (NODE)FA1(f1); n2 = (NODE)FA1(f2); |
r0 = 0; |
r0 = 0; |
Line 2270 FNODE fnode_normalize_mul(FNODE f1,FNODE f2,int expand |
|
Line 2262 FNODE fnode_normalize_mul(FNODE f1,FNODE f2,int expand |
|
Num c1,c2,c,e; |
Num c1,c2,c,e; |
int l1,l,i,j; |
int l1,l,i,j; |
|
|
if ( fnode_is_zero(f1) || fnode_is_zero(f2) ) return 0; |
if ( IS_ZERO(f1) || IS_ZERO(f2) ) return mkfnode(1,I_FORMULA,0); |
else if ( fnode_is_number(f1) ) |
else if ( fnode_is_number(f1) ) |
return fnode_normalize_mul_coef((Num)eval(f1),f2,expand); |
return fnode_normalize_mul_coef((Num)eval(f1),f2,expand); |
else if ( fnode_is_number(f2) ) |
else if ( fnode_is_number(f2) ) |
Line 2332 FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand |
|
Line 2324 FNODE fnode_normalize_pwr(FNODE f1,FNODE f2,int expand |
|
NODE arg,n; |
NODE arg,n; |
Q q; |
Q q; |
|
|
if ( fnode_is_zero(f2) ) return mkfnode(1,I_FORMULA,ONE); |
if ( IS_ZERO(f2) ) return mkfnode(1,I_FORMULA,ONE); |
else if ( fnode_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_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) ) { |
Line 2371 FNODE fnode_expand_pwr(FNODE f,int n) |
|
Line 2363 FNODE fnode_expand_pwr(FNODE f,int n) |
|
FNODE f1,f2; |
FNODE f1,f2; |
|
|
if ( !n ) return mkfnode(1,I_FORMULA,ONE); |
if ( !n ) return mkfnode(1,I_FORMULA,ONE); |
else if ( fnode_is_zero(f) ) return mkfnode(1,I_FORMULA,0); |
else if ( IS_ZERO(f) ) return mkfnode(1,I_FORMULA,0); |
else if ( n == 1 ) return f; |
else if ( n == 1 ) return f; |
else { |
else { |
n1 = n/2; |
n1 = n/2; |