version 1.10, 2001/09/03 01:04:26 |
version 1.11, 2001/10/09 01:36:10 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Mgfs.c,v 1.9 2001/07/23 05:05:41 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Mgfs.c,v 1.10 2001/09/03 01:04:26 noro Exp $ */ |
|
|
#include "ca.h" |
#include "ca.h" |
|
|
extern int up_kara_mag, current_gfs_q1; |
extern int up_kara_mag, current_gfs_q1; |
extern int *current_gfs_plus1; |
extern int *current_gfs_plus1; |
|
|
void mulssfum(UM,int,UM); |
|
void kmulsfummain(UM,UM,UM); |
|
|
|
|
|
#if defined(__GNUC__) |
#if defined(__GNUC__) |
#define INLINE inline |
#define INLINE inline |
#elif defined(VISUAL) |
#elif defined(VISUAL) |
Line 17 void kmulsfummain(UM,UM,UM); |
|
Line 13 void kmulsfummain(UM,UM,UM); |
|
#define INLINE |
#define INLINE |
#endif |
#endif |
|
|
INLINE int _ADDSF(a,b) |
INLINE int _ADDSF(int a,int b) |
int a,b; |
|
{ |
{ |
if ( !a ) |
if ( !a ) |
return b; |
return b; |
|
|
} |
} |
} |
} |
|
|
INLINE int _MULSF(a,b) |
INLINE int _MULSF(int a,int b) |
int a,b; |
|
{ |
{ |
if ( !a || !b ) |
if ( !a || !b ) |
return 0; |
return 0; |
|
|
} |
} |
} |
} |
|
|
void addsfum(p1,p2,pr) |
void addsfum(UM p1,UM p2,UM pr) |
UM p1,p2,pr; |
|
{ |
{ |
int *c1,*c2,*cr,i,dmax,dmin; |
int *c1,*c2,*cr,i,dmax,dmin; |
|
|
|
|
DEG(pr) = dmax; |
DEG(pr) = dmax; |
} |
} |
|
|
void subsfum(p1,p2,pr) |
void subsfum(UM p1,UM p2,UM pr) |
UM p1,p2,pr; |
|
{ |
{ |
int *c1,*c2,*cr,i; |
int *c1,*c2,*cr,i; |
int dmax,dmin; |
int dmax,dmin; |
|
|
DEG(pr) = dmax; |
DEG(pr) = dmax; |
} |
} |
|
|
void gcdsfum(p1,p2,pr) |
void gcdsfum(UM p1,UM p2,UM pr) |
UM p1,p2,pr; |
|
{ |
{ |
int inv; |
int inv; |
UM t1,t2,q,tum; |
UM t1,t2,q,tum; |
|
|
mulssfum(t2,inv,pr); |
mulssfum(t2,inv,pr); |
} |
} |
} |
} |
void mulsfum(p1,p2,pr) |
|
UM p1,p2,pr; |
void mulsfum(UM p1,UM p2,UM pr) |
{ |
{ |
int *pc1,*pcr; |
int *pc1,*pcr; |
int *c1,*c2,*cr; |
int *c1,*c2,*cr; |
|
|
DEG(pr) = d1 + d2; |
DEG(pr) = d1 + d2; |
} |
} |
|
|
void mulssfum(p,n,pr) |
void mulssfum(UM p,int n,UM pr) |
int n; |
|
UM p,pr; |
|
{ |
{ |
int *sp,*dp; |
int *sp,*dp; |
int i; |
int i; |
|
|
*dp = _MULSF(*sp,n); |
*dp = _MULSF(*sp,n); |
} |
} |
|
|
void kmulsfum(n1,n2,nr) |
void kmulsfum(UM n1,UM n2,UM nr) |
UM n1,n2,nr; |
|
{ |
{ |
UM n,t,s,m,carry; |
UM n,t,s,m,carry; |
int d,d1,d2,len,i,l; |
int d,d1,d2,len,i,l; |
|
|
bcopy((char *)r0,(char *)COEF(nr),l*sizeof(int)); |
bcopy((char *)r0,(char *)COEF(nr),l*sizeof(int)); |
} |
} |
|
|
void kmulsfummain(n1,n2,nr) |
void kmulsfummain(UM n1,UM n2,UM nr) |
UM n1,n2,nr; |
|
{ |
{ |
int d1,d2,h,len; |
int d1,d2,h,len; |
UM n1lo,n1hi,n2lo,n2hi,hi,lo,mid1,mid2,mid,s1,s2,t1,t2; |
UM n1lo,n1hi,n2lo,n2hi,hi,lo,mid1,mid2,mid,s1,s2,t1,t2; |
|
|
copyum(t1,nr); |
copyum(t1,nr); |
} |
} |
|
|
int divsfum(p1,p2,pq) |
int divsfum(UM p1,UM p2,UM pq) |
UM p1,p2,pq; |
|
{ |
{ |
int *pc1,*pct; |
int *pc1,*pct; |
int *c1,*c2,*ct; |
int *c1,*c2,*ct; |
|
|
return i; |
return i; |
} |
} |
|
|
void diffsfum(f,fd) |
void diffsfum(UM f,UM fd) |
UM f,fd; |
|
{ |
{ |
int *dp,*sp; |
int *dp,*sp; |
int i; |
int i; |
|
|
degum(fd,DEG(f) - 1); |
degum(fd,DEG(f) - 1); |
} |
} |
|
|
void monicsfum(f) |
void monicsfum(UM f) |
UM f; |
|
{ |
{ |
int *sp; |
int *sp; |
int i,inv; |
int i,inv; |
|
|
*sp = _MULSF(*sp,inv); |
*sp = _MULSF(*sp,inv); |
} |
} |
|
|
int compsfum(a,b) |
int compsfum(UM a,UM b) |
UM a,b; |
|
{ |
{ |
int i,da,db; |
int i,da,db; |
|
|
Line 361 void mulsfarray_trunc(int,int *,int *,int *); |
|
Line 344 void mulsfarray_trunc(int,int *,int *,int *); |
|
|
|
/* f1 = f1->c[0]+f1->c[1]*y+..., f2 = f2->c[0]+f2->c[1]*y+... mod y^n */ |
/* f1 = f1->c[0]+f1->c[1]*y+..., f2 = f2->c[0]+f2->c[1]*y+... mod y^n */ |
|
|
void mulsfbm(f1,f2,fr) |
void mulsfbm(BM f1,BM f2,BM fr) |
BM f1,f2,fr; |
|
{ |
{ |
UM mul,t,s; |
UM mul,t,s; |
int i,j,h,d1,d2,dy; |
int i,j,d1,d2,dy; |
|
|
dy = MIN(DEG(f1),DEG(f2)); |
dy = MIN(DEG(f1),DEG(f2)); |
|
|
|
|
DEG(fr) = dy; |
DEG(fr) = dy; |
} |
} |
|
|
int degbm(f) |
int degbm(BM f) |
BM f; |
|
{ |
{ |
int d,i,dy; |
int d,i,dy; |
|
|
|
|
|
|
/* g += f */ |
/* g += f */ |
|
|
void addtosfbm(f,g) |
void addtosfbm(BM f,BM g) |
BM f,g; |
|
{ |
{ |
int i,d1,d2,dy; |
int i,d1,d2,dy; |
UM t; |
UM t; |
|
|
} |
} |
} |
} |
|
|
void eucsfum(f1,f2,a,b) |
void eucsfum(UM f1,UM f2,UM a,UM b) |
UM f1,f2,a,b; |
|
{ |
{ |
UM g1,g2,a1,a2,a3,wm,q,tum; |
UM g1,g2,a1,a2,a3,wm,q,tum; |
int d,dr; |
int d,dr; |
|
|
|
|
void shiftsfum(UM,int,UM); |
void shiftsfum(UM,int,UM); |
|
|
void shiftsflum(n,f,ev) |
void shiftsflum(int n,LUM f,int ev) |
int n; |
|
LUM f; |
|
int ev; |
|
{ |
{ |
int d,i,j; |
int d,i,j; |
UM w,w1; |
UM w,w1; |
|
|
|
|
/* f(x) -> g(x) = f(x+a) */ |
/* f(x) -> g(x) = f(x+a) */ |
|
|
void shiftsfum(f,a,g) |
void shiftsfum(UM f,int a,UM g) |
UM f; |
|
int a; |
|
UM g; |
|
{ |
{ |
int n,i; |
int n,i; |
UM pwr,xa,w,t; |
UM pwr,xa,w,t; |
|
|
|
|
/* f(y) -> f(y+a) */ |
/* f(y) -> f(y+a) */ |
|
|
void shiftsfbm(f,a) |
void shiftsfbm(BM f,int a) |
BM f; |
|
int a; |
|
{ |
{ |
int i,j,d,dy; |
int i,j,d,dy; |
UM pwr,ya,w,t,s; |
UM pwr,ya,w,t,s; |
|
|
} |
} |
} |
} |
|
|
void clearbm(n,f) |
void clearbm(int n,BM f) |
int n; |
|
BM f; |
|
{ |
{ |
int i,dy; |
int i,dy; |
UM *c; |
UM *c; |