| version 1.1, 2018/09/19 05:45:07 |
version 1.2, 2018/09/28 08:20:28 |
|
|
| /* $OpenXM$ */ |
/* $OpenXM: OpenXM_contrib2/asir2018/engine/Hgfs.c,v 1.1 2018/09/19 05:45:07 noro Exp $ */ |
| |
|
| #include "ca.h" |
#include "ca.h" |
| #include "inline.h" |
#include "inline.h" |
| Line 72 void ufctrsf(P p,DCP *dcp) |
|
| Line 72 void ufctrsf(P p,DCP *dcp) |
|
| NEWDC(dc0); COEF(dc0) = lc; DEG(dc0) = ONE; dc = dc0; |
NEWDC(dc0); COEF(dc0) = lc; DEG(dc0) = ONE; dc = dc0; |
| for ( n = 0; udc[n].f; n++ ) { |
for ( n = 0; udc[n].f; n++ ) { |
| NEWDC(NEXT(dc)); dc = NEXT(dc); |
NEWDC(NEXT(dc)); dc = NEXT(dc); |
| STOQ(udc[n].n,DEG(dc)); sfumtop(VR(p),udc[n].f,&COEF(dc)); |
STOZ(udc[n].n,DEG(dc)); sfumtop(VR(p),udc[n].f,&COEF(dc)); |
| } |
} |
| NEXT(dc) = 0; *dcp = dc0; |
NEXT(dc) = 0; *dcp = dc0; |
| } |
} |
| Line 182 void spwrsfum(UM m,UM f,Z e,UM r) |
|
| Line 182 void spwrsfum(UM m,UM f,Z e,UM r) |
|
| } else if ( UNIZ(e) ) |
} else if ( UNIZ(e) ) |
| cpyum(f,r); |
cpyum(f,r); |
| else { |
else { |
| STOQ(2,two); |
STOZ(2,two); |
| divqrz(e,two,&e1,&rem); |
divqrz(e,two,&e1,&rem); |
| t = W_UMALLOC(2*DEG(m)); spwrsfum(m,f,e1,t); |
t = W_UMALLOC(2*DEG(m)); spwrsfum(m,f,e1,t); |
| s = W_UMALLOC(2*DEG(m)); q = W_UMALLOC(2*DEG(m)); |
s = W_UMALLOC(2*DEG(m)); q = W_UMALLOC(2*DEG(m)); |
| Line 488 void canzassf(UM f,int d,UM *r) |
|
| Line 488 void canzassf(UM f,int d,UM *r) |
|
| o = W_UMALLOC(0); DEG(o) = 0; COEF(o)[0] = _onesf(); |
o = W_UMALLOC(0); DEG(o) = 0; COEF(o)[0] = _onesf(); |
| q = field_order_sf(); |
q = field_order_sf(); |
| if ( q % 2 ) { |
if ( q % 2 ) { |
| STOQ(q,n1); STOQ(d,z); pwrz(n1,z,&n2); subz(n2,ONE,&n3); |
STOZ(q,n1); STOZ(d,z); pwrz(n1,z,&n2); subz(n2,ONE,&n3); |
| STOQ(2,n4); divz(n3,n4,&n5); |
STOZ(2,n4); divsz(n3,n4,&n5); |
| } else |
} else |
| ed = d*extdeg_sf(); |
ed = d*extdeg_sf(); |
| while ( 1 ) { |
while ( 1 ) { |
| Line 668 int sfberle(V x,V y,P f,int count,GFS *ev,DCP *dcp) |
|
| Line 668 int sfberle(V x,V y,P f,int count,GFS *ev,DCP *dcp) |
|
| NEWVL(NEXT(vl)); NEXT(vl)->v = y; |
NEWVL(NEXT(vl)); NEXT(vl)->v = y; |
| NEXT(NEXT(vl)) =0; |
NEXT(NEXT(vl)) =0; |
| simp_ff((Obj)f,&obj); f = (P)obj; |
simp_ff((Obj)f,&obj); f = (P)obj; |
| n = QTOS(DEG(DC(f))); |
n = ZTOS(DEG(DC(f))); |
| wf = W_UMALLOC(n); wf1 = W_UMALLOC(n); wf2 = W_UMALLOC(n); |
wf = W_UMALLOC(n); wf1 = W_UMALLOC(n); wf2 = W_UMALLOC(n); |
| wfs = W_UMALLOC(n); gcd = W_UMALLOC(n); |
wfs = W_UMALLOC(n); gcd = W_UMALLOC(n); |
| q = field_order_sf(); |
q = field_order_sf(); |
| Line 935 void ptosfbm(int dy,P f,BM fl) |
|
| Line 935 void ptosfbm(int dy,P f,BM fl) |
|
| int d,i,dx; |
int d,i,dx; |
| UM t; |
UM t; |
| |
|
| dx = QTOS(DEG(DC(f))); |
dx = ZTOS(DEG(DC(f))); |
| if ( DEG(fl) < dy ) |
if ( DEG(fl) < dy ) |
| error("ptosfbm : invalid input"); |
error("ptosfbm : invalid input"); |
| DEG(fl) = dy; |
DEG(fl) = dy; |
| clearbm(dx,fl); |
clearbm(dx,fl); |
| t = UMALLOC(dy); |
t = UMALLOC(dy); |
| for ( dc = DC(f); dc; dc = NEXT(dc) ) { |
for ( dc = DC(f); dc; dc = NEXT(dc) ) { |
| d = QTOS(DEG(dc)); |
d = ZTOS(DEG(dc)); |
| ptosfum(COEF(dc),t); |
ptosfum(COEF(dc),t); |
| for ( i = 0; i <= DEG(t); i++ ) |
for ( i = 0; i <= DEG(t); i++ ) |
| COEF(COEF(fl)[i])[d] = COEF(t)[i]; |
COEF(COEF(fl)[i])[d] = COEF(t)[i]; |
| Line 970 void sfbmtop(BM f,V x,V y,P *fp) |
|
| Line 970 void sfbmtop(BM f,V x,V y,P *fp) |
|
| for ( j = 0; j <= dy; j++ ) { |
for ( j = 0; j <= dy; j++ ) { |
| if ( DEG(c[j]) >= i && (a = COEF(c[j])[i]) ) { |
if ( DEG(c[j]) >= i && (a = COEF(c[j])[i]) ) { |
| NEWDC(dct); |
NEWDC(dct); |
| STOQ(j,DEG(dct)); |
STOZ(j,DEG(dct)); |
| iftogfs(a,&b); |
iftogfs(a,&b); |
| COEF(dct) = (P)b; |
COEF(dct) = (P)b; |
| NEXT(dct) = dc; |
NEXT(dct) = dc; |
| Line 979 void sfbmtop(BM f,V x,V y,P *fp) |
|
| Line 979 void sfbmtop(BM f,V x,V y,P *fp) |
|
| } |
} |
| if ( dc ) { |
if ( dc ) { |
| NEWDC(dct); |
NEWDC(dct); |
| STOQ(i,DEG(dct)); |
STOZ(i,DEG(dct)); |
| MKP(y,dc,COEF(dct)); |
MKP(y,dc,COEF(dct)); |
| NEXT(dct) = dc0; |
NEXT(dct) = dc0; |
| dc0 = dct; |
dc0 = dct; |
| Line 1028 void sfusqfr(P f,DCP *dcp) |
|
| Line 1028 void sfusqfr(P f,DCP *dcp) |
|
| W_CALLOC(n+1,struct oDUM,udc); |
W_CALLOC(n+1,struct oDUM,udc); |
| gensqfrsfum(mf,udc); |
gensqfrsfum(mf,udc); |
| for ( i = 0, dc = 0; udc[i].f; i++ ) { |
for ( i = 0, dc = 0; udc[i].f; i++ ) { |
| NEWDC(dct); STOQ(udc[i].n,DEG(dct)); |
NEWDC(dct); STOZ(udc[i].n,DEG(dct)); |
| sfumtop(x,udc[i].f,&COEF(dct)); |
sfumtop(x,udc[i].f,&COEF(dct)); |
| NEXT(dct) = dc; dc = dct; |
NEXT(dct) = dc; dc = dct; |
| } |
} |