version 1.4, 2003/05/20 07:19:41 |
version 1.6, 2018/03/29 01:32:52 |
|
|
* 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/engine/vect.c,v 1.3 2000/08/22 05:04:07 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/vect.c,v 1.5 2003/05/22 07:01:40 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
|
|
Line 53 void addvect(vl,a,b,c) |
|
Line 53 void addvect(vl,a,b,c) |
|
VL vl; |
VL vl; |
VECT a,b,*c; |
VECT a,b,*c; |
{ |
{ |
int len,i; |
int len,i; |
VECT t; |
VECT t; |
pointer *ab,*bb,*tb; |
pointer *ab,*bb,*tb; |
|
|
if ( !a ) |
if ( !a ) |
*c = b; |
*c = b; |
else if ( !b ) |
else if ( !b ) |
*c = a; |
*c = a; |
else if ( a->len != b->len ) { |
else if ( a->len != b->len ) { |
*c = 0; error("addvect : size mismatch"); |
*c = 0; error("addvect : size mismatch"); |
} else { |
} else { |
len = a->len; |
len = a->len; |
MKVECT(t,len); |
MKVECT(t,len); |
for ( i = 0, ab = BDY(a), bb = BDY(b), tb = BDY(t); i < len; i++ ) |
for ( i = 0, ab = BDY(a), bb = BDY(b), tb = BDY(t); i < len; i++ ) |
arf_add(vl,(Obj)ab[i],(Obj)bb[i],(Obj *)&tb[i]); |
arf_add(vl,(Obj)ab[i],(Obj)bb[i],(Obj *)&tb[i]); |
*c = t; |
*c = t; |
} |
} |
} |
} |
|
|
void subvect(vl,a,b,c) |
void subvect(vl,a,b,c) |
VL vl; |
VL vl; |
VECT a,b,*c; |
VECT a,b,*c; |
{ |
{ |
int len,i; |
int len,i; |
VECT t; |
VECT t; |
pointer *ab,*bb,*tb; |
pointer *ab,*bb,*tb; |
|
|
if ( !a ) |
if ( !a ) |
chsgnvect(b,c); |
chsgnvect(b,c); |
else if ( !b ) |
else if ( !b ) |
*c = a; |
*c = a; |
else if (a->len != b->len ) { |
else if (a->len != b->len ) { |
*c = 0; error("subvect : size mismatch"); |
*c = 0; error("subvect : size mismatch"); |
} else { |
} else { |
len = a->len; |
len = a->len; |
MKVECT(t,len); |
MKVECT(t,len); |
for ( i = 0, ab = BDY(a), bb = BDY(b), tb = BDY(t); |
for ( i = 0, ab = BDY(a), bb = BDY(b), tb = BDY(t); |
i < len; i++ ) |
i < len; i++ ) |
arf_sub(vl,(Obj)ab[i],(Obj)bb[i],(Obj *)&tb[i]); |
arf_sub(vl,(Obj)ab[i],(Obj)bb[i],(Obj *)&tb[i]); |
*c = t; |
*c = t; |
} |
} |
} |
} |
|
|
void mulvect(vl,a,b,c) |
void mulvect(vl,a,b,c) |
VL vl; |
VL vl; |
Obj a,b,*c; |
Obj a,b,*c; |
{ |
{ |
if ( !a || !b ) |
if ( !a || !b ) |
*c = 0; |
*c = 0; |
else if ( OID(a) <= O_R ) |
else if ( OID(a) <= O_R || OID(a) == O_DP ) |
mulrvect(vl,a,(VECT)b,(VECT *)c); |
mulrvect(vl,a,(VECT)b,(VECT *)c); |
else if ( OID(b) <= O_R ) |
else if ( OID(b) <= O_R || OID(b) == O_DP ) |
mulrvect(vl,b,(VECT)a,(VECT *)c); |
mulrvect(vl,b,(VECT)a,(VECT *)c); |
else |
else |
notdef(vl,a,b,c); |
notdef(vl,a,b,c); |
} |
} |
|
|
void divvect(vl,a,b,c) |
void divvect(vl,a,b,c) |
VL vl; |
VL vl; |
Obj a,b,*c; |
Obj a,b,*c; |
{ |
{ |
Obj t; |
Obj t; |
|
|
if ( !b ) |
if ( !b ) |
error("divvect : division by 0"); |
error("divvect : division by 0"); |
else if ( !a ) |
else if ( !a ) |
*c = 0; |
*c = 0; |
else if ( OID(b) > O_R ) |
else if ( OID(b) > O_R ) |
notdef(vl,a,b,c); |
notdef(vl,a,b,c); |
else { |
else { |
arf_div(vl,(Obj)ONE,b,&t); mulrvect(vl,(Obj)t,(VECT)a,(VECT *)c); |
arf_div(vl,(Obj)ONE,b,&t); mulrvect(vl,(Obj)t,(VECT)a,(VECT *)c); |
} |
} |
} |
} |
|
|
void chsgnvect(a,b) |
void chsgnvect(a,b) |
VECT a,*b; |
VECT a,*b; |
{ |
{ |
VECT t; |
VECT t; |
int len,i; |
int len,i; |
pointer *ab,*tb; |
pointer *ab,*tb; |
|
|
if ( !a ) |
if ( !a ) |
*b = 0; |
*b = 0; |
else { |
else { |
len = a->len; |
len = a->len; |
MKVECT(t,len); |
MKVECT(t,len); |
for ( i = 0, ab = BDY(a), tb = BDY(t); |
for ( i = 0, ab = BDY(a), tb = BDY(t); |
i < len; i++ ) |
i < len; i++ ) |
arf_chsgn((Obj)ab[i],(Obj *)&tb[i]); |
arf_chsgn((Obj)ab[i],(Obj *)&tb[i]); |
*b = t; |
*b = t; |
} |
} |
} |
} |
|
|
void mulrvect(vl,a,b,c) |
void mulrvect(vl,a,b,c) |
|
|
Obj a; |
Obj a; |
VECT b,*c; |
VECT b,*c; |
{ |
{ |
int len,i; |
int len,i; |
VECT t; |
VECT t; |
pointer *bb,*tb; |
pointer *bb,*tb; |
|
|
if ( !a || !b ) |
if ( !a || !b ) |
*c = 0; |
*c = 0; |
else { |
else { |
len = b->len; |
len = b->len; |
MKVECT(t,len); |
MKVECT(t,len); |
for ( i = 0, bb = BDY(b), tb = BDY(t); i < len; i++ ) |
for ( i = 0, bb = BDY(b), tb = BDY(t); i < len; i++ ) |
arf_mul(vl,a,(Obj)bb[i],(Obj *)&tb[i]); |
arf_mul(vl,a,(Obj)bb[i],(Obj *)&tb[i]); |
*c = t; |
*c = t; |
} |
} |
} |
} |
|
|
int compvect(vl,a,b) |
int compvect(vl,a,b) |
VL vl; |
VL vl; |
VECT a,b; |
VECT a,b; |
{ |
{ |
int i,len,t; |
int i,len,t; |
|
|
if ( !a ) |
if ( !a ) |
return b?-1:0; |
return b?-1:0; |
else if ( !b ) |
else if ( !b ) |
return 1; |
return 1; |
else if ( a->len != b->len ) |
else if ( a->len != b->len ) |
return a->len>b->len ? 1 : -1; |
return a->len>b->len ? 1 : -1; |
else { |
else { |
for ( i = 0, len = a->len; i < len; i++ ) |
for ( i = 0, len = a->len; i < len; i++ ) |
if ( t = arf_comp(vl,(Obj)BDY(a)[i],(Obj)BDY(b)[i]) ) |
if ( t = arf_comp(vl,(Obj)BDY(a)[i],(Obj)BDY(b)[i]) ) |
return t; |
return t; |
return 0; |
return 0; |
} |
} |
} |
} |