[BACK]Return to pdiv.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/pdiv.c between version 1.5 and 1.9

version 1.5, 2001/02/21 07:10:17 version 1.9, 2006/11/08 07:34:33
Line 45 
Line 45 
  * 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/pdiv.c,v 1.4 2000/08/22 05:03:59 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/pdiv.c,v 1.8 2004/06/30 04:29:38 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
   
 void Psdiv(), Psrem(), Ptdiv(), Psqr(), Pinva_mod();  void Psdiv(), Psrem(), Ptdiv(), Psqr(), Pinva_mod(), Pprem();
 void Psdiv_gf2n(), Psrem_gf2n();  void Psdiv_gf2n(), Psrem_gf2n(), Pgcd_gf2n();
 void Psdivm(), Psremm(), Psqrm();  void Psdivm(), Psremm(), Psqrm();
 void Psrem_mod();  void Psrem_mod();
 void Pugcd();  void Pugcd();
Line 61  void Pudiv();
Line 61  void Pudiv();
 struct ftab pdiv_tab[] = {  struct ftab pdiv_tab[] = {
         {"sdiv",Psdiv,-3},          {"sdiv",Psdiv,-3},
         {"srem",Psrem,-3},          {"srem",Psrem,-3},
           {"prem",Pprem,-3},
         {"sdiv_gf2n",Psdiv_gf2n,2},          {"sdiv_gf2n",Psdiv_gf2n,2},
         {"srem_gf2n",Psrem_gf2n,2},          {"srem_gf2n",Psrem_gf2n,2},
           {"gcd_gf2n",Pgcd_gf2n,2},
         {"sqr",Psqr,-3},          {"sqr",Psqr,-3},
         {"tdiv",Ptdiv,-3},          {"tdiv",Ptdiv,-3},
         {"udiv",Pudiv,2},          {"udiv",Pudiv,2},
Line 118  Obj *rp;
Line 120  Obj *rp;
                 divsrp(CO,dnd,dvr,&q,(P *)rp);                  divsrp(CO,dnd,dvr,&q,(P *)rp);
 }  }
   
   void Pprem(arg,rp)
   NODE arg;
   P *rp;
   {
           P q,r,dnd,dnd1,dvr,dvr1;
           V v;
           VL vl;
   
           asir_assert(ARG0(arg),O_P,"prem");
           asir_assert(ARG1(arg),O_P,"prem");
           dnd = (P)ARG0(arg); dvr = (P)ARG1(arg);
           if ( !dvr ) error("prem : division by 0");
           if ( !dnd ) {
                   *rp = 0; return;
           }
           if ( argc(arg) == 3 ) {
                   v = VR((P)ARG2(arg));
                   change_mvar(CO,dnd,v,&dnd1); change_mvar(CO,dvr,v,&dvr1);
                   reordvar(CO,v,&vl);
                   premp(vl,dnd1,dvr1,&r);
                   restore_mvar(CO,r,v,rp);
           } else
                   premp(CO,dnd,dvr,rp);
   }
   
 void Psqr(arg,rp)  void Psqr(arg,rp)
 NODE arg;  NODE arg;
 LIST *rp;  LIST *rp;
Line 177  GF2N *rp;
Line 204  GF2N *rp;
         }          }
 }  }
   
   void Pgcd_gf2n(arg,rp)
   NODE arg;
   GF2N *rp;
   {
           GF2N p1,p2;
           UP2 gcd;
   
           p1 = (GF2N)ARG0(arg); p2 = (GF2N)ARG1(arg);
           if ( !p1 )
                   *rp = p2;
           else if ( !p2 )
                   *rp = p1;
           else {
                   gcdup2(p1->body,p2->body,&gcd);
                   MKGF2N(gcd,*rp);
           }
   }
   
 void Ptdiv(arg,rp)  void Ptdiv(arg,rp)
 NODE arg;  NODE arg;
 P *rp;  P *rp;
Line 198  P *rp;
Line 243  P *rp;
                         mptop(q,rp);                          mptop(q,rp);
                 else                  else
                         *rp = 0;                          *rp = 0;
         } else {          } else if ( qpcheck((Obj)p1) && qpcheck((Obj)p2) ) {
                 ptozp(p1,1,(Q *)&c1,&q1); ptozp(p2,1,(Q *)&c2,&q2);                  ptozp(p1,1,(Q *)&c1,&q1); ptozp(p2,1,(Q *)&c2,&q2);
                 if ( divtpz(CO,q1,q2,&q) ) {                  if ( divtpz(CO,q1,q2,&q) ) {
                         divq((Q)c1,(Q)c2,(Q *)&c); mulp(CO,q,c,rp);                          divq((Q)c1,(Q)c2,(Q *)&c); mulp(CO,q,c,rp);
                 } else                  } else
                           *rp = 0;
           } else {
                   if ( !divtp(CO,p1,p2,rp) )
                         *rp = 0;                          *rp = 0;
         }          }
 }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.9

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>