[BACK]Return to convert.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_pari

Diff for /OpenXM/src/ox_pari/convert.c between version 1.6 and 1.7

version 1.6, 2020/08/26 06:03:31 version 1.7, 2021/03/25 07:03:21
Line 1 
Line 1 
 #include "ox_pari.h"  #include "ox_pari.h"
   
   int with_gmp;
   
   int gmp_check()
   {
     GEN z1,z2;
   
     // z1=[*,*,1,2], z2=[*,*,2,1]
     // if gmp style => z1>z2 else z1<z2
     z1 = cgeti(2+2); setsigne(z1,1); setlgefint(z1,lg(z1));
     z1[2] = 1; z1[3] = 2;
     z2 = cgeti(2+2); setsigne(z2,1); setlgefint(z2,lg(z2));
     z2[2] = 2; z2[3] = 1;
     if ( cmpii(z1,z2) > 0 ) with_gmp = 1;
     else with_gmp = 0;
   }
   
 GEN cmo_int32_to_GEN(cmo_int32 *c)  GEN cmo_int32_to_GEN(cmo_int32 *c)
 {  {
   GEN z;    GEN z;
Line 42  GEN cmo_zz_to_GEN(cmo_zz *c)
Line 58  GEN cmo_zz_to_GEN(cmo_zz *c)
   len = ABSIZ(mpz);    len = ABSIZ(mpz);
   ptr = (long *)PTR(mpz);    ptr = (long *)PTR(mpz);
   z = cgeti(len+2);    z = cgeti(len+2);
   for ( j = 0; j < len; j++ )    if ( with_gmp ) // least signifcant first
     z[len-j+1] = ptr[j];      for ( j = 0; j < len; j++ )
         z[j+2] = ptr[j];
     else // most signifcant first
       for ( j = 0; j < len; j++ )
         z[len-j+1] = ptr[j];
   setsigne(z,sgn);    setsigne(z,sgn);
   setlgefint(z,lg(z));    setlgefint(z,lg(z));
   return z;    return z;
Line 166  cmo_zz *GEN_to_cmo_zz(GEN z)
Line 186  cmo_zz *GEN_to_cmo_zz(GEN z)
   cmo_zz *c;    cmo_zz *c;
   
   c = new_cmo_zz();    c = new_cmo_zz();
   mpz_import(c->mpz,lg(z)-2,1,sizeof(long),0,0,&z[2]);    // -1:least significant first, 1:most significant first
     mpz_import(c->mpz,lg(z)-2,with_gmp?-1:1,sizeof(long),0,0,&z[2]);
   if ( signe(z) < 0 )    if ( signe(z) < 0 )
     mpz_neg(c->mpz,c->mpz);      mpz_neg(c->mpz,c->mpz);
   return c;    return c;

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

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