typedef struct { unsigned short n; unsigned short a; } oterm; typedef struct{ oterm t[DEG]; } OP; typedef struct { unsigned int x[DEG]; } vec; typedef struct { OP u; OP v; OP d; } EX; EX xgcd(OP f,OP g){ OP h={0},ww={0},v[K*2]={0},u[K*2]={0}; oterm a,b; int i=0,j,k; EX e={0}; u[0].t[0].a=1; u[0].t[0].n=0; u[1].t[0].a=0; u[1].t[0].n=0; u[2].t[0].a=1; u[2].t[0].n=0; v[0].t[0].a=0; v[0].t[0].n=0; v[1].t[0].a=1; v[1].t[0].n=0; //printpol(o2v(f)); printpol(o2v(g)); printf(" in xgcd============\n"); // exit(1); k=0; //i=1; for(i=0;i<T;i++){ if(LT(g).a==0 || LT(f).a==0) break; h=omod(f,g); ww=odiv(f,g); v[i+2]=oadd(v[i],omul(ww,v[i+1])); u[i+2]=oadd(u[i],omul(ww,u[i+1])); printf("i+1=%d\n",i+1); f=g; g=h; } //exit(1); //v[i]=odiv(v[i],h); //u[i]=odiv(u[i],h); // h.t[0].a=1; //h.t[0].n=0; printf("i=%d\n",i); printpol(o2v(v[i])); printf(" v=============\n"); printpol(o2v(u[i])); printf(" u=============\n"); printpol(o2v(h)); printf(" h=============\n"); e.d=h; e.v=v[i]; e.u=u[i]; // exit(1); return e; }
次のコードにバグがあり、クラッシュしてしまいます。-O2オプションをつけると正常動作するのですが、なぜオプションをつけないと暴走するのかわかりません。どなたか手を貸してほしいです。これはコードレビューの一部です。全体についてはGitHubにあるのでそちらをご覧ください。構造体は一変数多項式を表現するために作りました。otermは単項式で、次数と係数のメンバを持っています。単項式の配列がOP構造体です。
回答2件
あなたの回答
tips
プレビュー