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

version 1.1, 2015/08/21 01:20:30 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 19  GEN cmo_int32_to_GEN(cmo_int32 *c)
Line 35  GEN cmo_int32_to_GEN(cmo_int32 *c)
   return z;    return z;
 }  }
   
   GEN cmo_string_to_GEN(cmo_string *c)
   {
     GEN z;
     int l;
   
     l = strlen(c->s);
     z = cgetg(l+1,t_STR);
     strcpy(GSTR(z),c->s);
     return z;
   }
   
 GEN cmo_zz_to_GEN(cmo_zz *c)  GEN cmo_zz_to_GEN(cmo_zz *c)
 {  {
   mpz_ptr mpz;    mpz_ptr mpz;
Line 31  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 106  GEN cmo_up_to_GEN(cmo_polynomial_in_one_variable *c)
Line 137  GEN cmo_up_to_GEN(cmo_polynomial_in_one_variable *c)
   z = cgetg(d+3,t_POL);    z = cgetg(d+3,t_POL);
   setsigne(z,1);    setsigne(z,1);
   setvarn(z,c->var);    setvarn(z,c->var);
   setlgef(z,d+3);    setlg(z,d+3);
   for ( i = 2; i <= d+2; i++ )    for ( i = 2; i <= d+2; i++ )
     z[i] = (long)gen_0;      z[i] = (long)gen_0;
   for ( cell = c->head->next; cell != c->head; cell = cell->next ) {    for ( cell = c->head->next; cell != c->head; cell = cell->next ) {
Line 142  GEN cmo_rp_to_GEN(cmo_recursive_polynomial *c)
Line 173  GEN cmo_rp_to_GEN(cmo_recursive_polynomial *c)
   }    }
 }  }
   
   cmo_zz *GEN_to_cmo_string(GEN z)
   {
     cmo_string *c;
   
     c = new_cmo_string(GSTR(z));
     return (cmo_zz *)c;
   }
   
 cmo_zz *GEN_to_cmo_zz(GEN z)  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,lgef(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;
Line 161  cmo_qq *GEN_to_cmo_qq(GEN z)
Line 201  cmo_qq *GEN_to_cmo_qq(GEN z)
   num = (GEN)z[1];    num = (GEN)z[1];
   den = (GEN)z[2];    den = (GEN)z[2];
   c = new_cmo_qq();    c = new_cmo_qq();
   mpz_import(mpq_numref(c->mpq),lgef(num)-2,1,sizeof(long),0,0,&num[2]);    mpz_import(mpq_numref(c->mpq),lg(num)-2,1,sizeof(long),0,0,&num[2]);
   mpz_import(mpq_denref(c->mpq),lgef(num)-2,1,sizeof(long),0,0,&den[2]);    mpz_import(mpq_denref(c->mpq),lg(den)-2,1,sizeof(long),0,0,&den[2]);
   if ( signe(num)*signe(den) < 0 )    if ( signe(num)*signe(den) < 0 )
     mpz_neg(mpq_numref(c->mpq),mpq_numref(c->mpq));      mpz_neg(mpq_numref(c->mpq),mpq_numref(c->mpq));
   return c;    return c;
Line 184  cmo_bf *GEN_to_cmo_bf(GEN z)
Line 224  cmo_bf *GEN_to_cmo_bf(GEN z)
     ptr[j] = z[len-j+1];      ptr[j] = z[len-j+1];
   MPFR_EXP(c->mpfr) = (long long)(expo(z)+1);    MPFR_EXP(c->mpfr) = (long long)(expo(z)+1);
   MPFR_SIGN(c->mpfr) = gsigne(z);    MPFR_SIGN(c->mpfr) = gsigne(z);
     if ( !mpfr_sgn(c->mpfr) ) c = (cmo_bf *)new_cmo_zero();
   return c;    return c;
 }  }
   
Line 206  cmo_list *GEN_to_cmo_list(GEN z)
Line 247  cmo_list *GEN_to_cmo_list(GEN z)
 cmo_complex *GEN_to_cmo_complex(GEN z)  cmo_complex *GEN_to_cmo_complex(GEN z)
 {  {
   cmo_complex *c;    cmo_complex *c;
     cmo_bf *re,*im;
   
   c = new_cmo_complex();    re = (cmo_bf *)GEN_to_cmo((GEN)z[1]);
   c->re = GEN_to_cmo((GEN)z[1]);    im = (cmo_bf *)GEN_to_cmo((GEN)z[2]);
   c->im = GEN_to_cmo((GEN)z[2]);    if ( im->tag == CMO_ZERO )
   return c;      return (cmo_complex *)re;
     else {
       c = new_cmo_complex();
       c->re = (cmo *)re; c->im = (cmo *)im;
       return c;
     }
 }  }
   
 cmo_polynomial_in_one_variable *GEN_to_cmo_up(GEN z)  cmo_polynomial_in_one_variable *GEN_to_cmo_up(GEN z)
Line 251  GEN cmo_to_GEN(cmo *c)
Line 298  GEN cmo_to_GEN(cmo *c)
     return cmo_complex_to_GEN((cmo_complex *)c);      return cmo_complex_to_GEN((cmo_complex *)c);
   case CMO_IEEE_DOUBLE_FLOAT:    case CMO_IEEE_DOUBLE_FLOAT:
      return dbltor(((cmo_double *)c)->d);       return dbltor(((cmo_double *)c)->d);
   case CMO_BIGFLOAT: /* bigfloat */    case CMO_BIGFLOAT32: /* bigfloat */
     return cmo_bf_to_GEN((cmo_bf *)c);      return cmo_bf_to_GEN((cmo_bf *)c);
   case CMO_LIST:    case CMO_LIST:
     return cmo_list_to_GEN((cmo_list *)c);      return cmo_list_to_GEN((cmo_list *)c);
Line 259  GEN cmo_to_GEN(cmo *c)
Line 306  GEN cmo_to_GEN(cmo *c)
     return cmo_rp_to_GEN((cmo_recursive_polynomial *)c);      return cmo_rp_to_GEN((cmo_recursive_polynomial *)c);
   case CMO_POLYNOMIAL_IN_ONE_VARIABLE:    case CMO_POLYNOMIAL_IN_ONE_VARIABLE:
     return cmo_up_to_GEN((cmo_polynomial_in_one_variable *)c);      return cmo_up_to_GEN((cmo_polynomial_in_one_variable *)c);
     case CMO_STRING:
       return cmo_string_to_GEN((cmo_string *)c);
   default:    default:
     return 0;      return 0;
   }    }
Line 285  cmo *GEN_to_cmo(GEN z)
Line 334  cmo *GEN_to_cmo(GEN z)
     return (cmo *)GEN_to_cmo_list(z);      return (cmo *)GEN_to_cmo_list(z);
   case t_MAT: /* matrix */    case t_MAT: /* matrix */
     return (cmo *)GEN_to_cmo_list(shallowtrans(z));      return (cmo *)GEN_to_cmo_list(shallowtrans(z));
     case t_STR: /* string */
       return (cmo *)GEN_to_cmo_string(z);
   default:    default:
     sprintf(buf,"GEN_to_cmo : unsupported type=%d",(int)typ(z));      sprintf(buf,"GEN_to_cmo : unsupported type=%d",(int)typ(z));
     return (cmo *)make_error2(buf);      return (cmo *)make_error2(buf);

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

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