[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.4 and 1.7

version 1.4, 2000/08/22 05:03:59 version 1.7, 2002/02/08 08:28:00
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.3 2000/08/21 08:31:20 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/pdiv.c,v 1.6 2001/03/29 09:49:56 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();
 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 63  struct ftab pdiv_tab[] = {
Line 63  struct ftab pdiv_tab[] = {
         {"srem",Psrem,-3},          {"srem",Psrem,-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,2},          {"tdiv",Ptdiv,-3},
         {"udiv",Pudiv,2},          {"udiv",Pudiv,2},
         {"sdivm",Psdivm,-4},          {"sdivm",Psdivm,-4},
         {"sremm",Psremm,-4},          {"sremm",Psremm,-4},
Line 177  GF2N *rp;
Line 178  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;
 {  {
         P p1,p2,q1,q2,q,c1,c2,c;          P p1,p2,q1,q2,q,c1,c2,c;
           int m;
   
         p1 = (P)ARG0(arg); p2 = (P)ARG1(arg);          p1 = (P)ARG0(arg); p2 = (P)ARG1(arg);
         asir_assert(p1,O_P,"tdiv");          asir_assert(p1,O_P,"tdiv");
Line 190  P *rp;
Line 210  P *rp;
                 *rp = 0;                  *rp = 0;
         else if ( (OID(p1) > O_P) || (OID(p2) > O_P ) )          else if ( (OID(p1) > O_P) || (OID(p2) > O_P ) )
                 *rp = 0;                  *rp = 0;
         else {          else if ( argc(arg) == 3 ) {
                   m = QTOS((Q)ARG2(arg));
                   ptomp(m,p1,&q1); ptomp(m,p2,&q2);
                   if ( divtmp(CO,m,q1,q2,&q) )
                           mptop(q,rp);
                   else
                           *rp = 0;
           } 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.4  
changed lines
  Added in v.1.7

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