=================================================================== RCS file: /home/cvs/OpenXM/src/ox_pari/convert.c,v retrieving revision 1.5 retrieving revision 1.7 diff -u -p -r1.5 -r1.7 --- OpenXM/src/ox_pari/convert.c 2018/03/29 02:14:30 1.5 +++ OpenXM/src/ox_pari/convert.c 2021/03/25 07:03:21 1.7 @@ -1,5 +1,21 @@ #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 0 ) with_gmp = 1; + else with_gmp = 0; +} + GEN cmo_int32_to_GEN(cmo_int32 *c) { GEN z; @@ -42,8 +58,12 @@ GEN cmo_zz_to_GEN(cmo_zz *c) len = ABSIZ(mpz); ptr = (long *)PTR(mpz); z = cgeti(len+2); - for ( j = 0; j < len; j++ ) - z[len-j+1] = ptr[j]; + if ( with_gmp ) // least signifcant first + 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); setlgefint(z,lg(z)); return z; @@ -117,7 +137,7 @@ GEN cmo_up_to_GEN(cmo_polynomial_in_one_variable *c) z = cgetg(d+3,t_POL); setsigne(z,1); setvarn(z,c->var); - setlgef(z,d+3); + setlg(z,d+3); for ( i = 2; i <= d+2; i++ ) z[i] = (long)gen_0; for ( cell = c->head->next; cell != c->head; cell = cell->next ) { @@ -158,7 +178,7 @@ cmo_zz *GEN_to_cmo_string(GEN z) cmo_string *c; c = new_cmo_string(GSTR(z)); - return c; + return (cmo_zz *)c; } cmo_zz *GEN_to_cmo_zz(GEN z) @@ -166,7 +186,8 @@ cmo_zz *GEN_to_cmo_zz(GEN z) cmo_zz *c; 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 ) mpz_neg(c->mpz,c->mpz); return c; @@ -180,8 +201,8 @@ cmo_qq *GEN_to_cmo_qq(GEN z) num = (GEN)z[1]; den = (GEN)z[2]; c = new_cmo_qq(); - mpz_import(mpq_numref(c->mpq),lgef(num)-2,1,sizeof(long),0,0,&num[2]); - mpz_import(mpq_denref(c->mpq),lgef(den)-2,1,sizeof(long),0,0,&den[2]); + mpz_import(mpq_numref(c->mpq),lg(num)-2,1,sizeof(long),0,0,&num[2]); + mpz_import(mpq_denref(c->mpq),lg(den)-2,1,sizeof(long),0,0,&den[2]); if ( signe(num)*signe(den) < 0 ) mpz_neg(mpq_numref(c->mpq),mpq_numref(c->mpq)); return c;