Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/msolve/msolve.c
Original file line number Diff line number Diff line change
Expand Up @@ -3208,7 +3208,7 @@ int newvalue_denom(mpz_t *denom, long deg, mpz_t r, long k, mpz_t *xdo,
mpz_t *xup, mpz_t tmp, mpz_t den_do, mpz_t den_up, long corr,
mpz_t c) {

mpz_scalar_product_interval(denom, deg, k, xdo, xup, tmp, den_do, den_up, corr);
mpz_scalar_product_interval(denom, deg, xdo, xup, tmp, den_do, den_up, corr);
return (mpz_sgn(den_do) != mpz_sgn(den_up) || mpz_sgn(den_do) == 0 || mpz_sgn(den_up) == 0);

}
Expand Down Expand Up @@ -3432,15 +3432,15 @@ void lazy_single_real_root_param(mpz_param_t param, mpz_t *polelim,
int refine = 1;
while(refine){
mpz_scalar_product_interval(param->coords[nv]->coeffs,
param->coords[nv]->length - 1, rt->k, xdo, xup,
param->coords[nv]->length - 1, xdo, xup,
tmp, val_do, val_up, corr);
int boo = 0;
while(to_split == 0 && mpz_sgn(val_do)*mpz_sgn(val_up) < 0){
refine_root_elim(param, polelim, ns, rt, pos_root,
tab, xdo, xup, den_up, den_do, c, &corr,
&b, info_level);
mpz_scalar_product_interval(param->coords[nv]->coeffs,
param->coords[nv]->length - 1, rt->k, xdo, xup,
param->coords[nv]->length - 1, xdo, xup,
tmp, val_do, val_up, corr);

boo = 1;
Expand All @@ -3462,7 +3462,7 @@ void lazy_single_real_root_param(mpz_param_t param, mpz_t *polelim,
tab, xdo, xup, den_up, den_do, c, &corr,
&b, info_level);
mpz_scalar_product_interval(param->coords[nv]->coeffs,
param->coords[nv]->length - 1, rt->k, xdo, xup,
param->coords[nv]->length - 1, xdo, xup,
tmp, val_do, val_up, corr);
newvalue_denom(param->denom->coeffs, param->denom->length - 1,
rt->numer, rt->k, xdo, xup, tmp, den_do, den_up, corr,
Expand Down
2 changes: 1 addition & 1 deletion src/usolve/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ noinst_LTLIBRARIES = libusolve.la
libusolve_la_SOURCES = usolve.c
libusolve_ladir = $(includedir)/msolve/usolve
libusolve_la_HEADERS = libusolve.h
libusolve_la_CFLAGS = $(SIMD_FLAGS) $(CPUEXT_FLAGS) $(OPENMP_CFLAGS)
libusolve_la_CFLAGS = $(SIMD_FLAGS) $(CPUEXT_FLAGS) $(OPENMP_CFLAGS) -Wall -Wextra

EXTRA_DIST = libusolve.h \
bisection.h \
Expand Down
20 changes: 10 additions & 10 deletions src/usolve/descartes.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ static unsigned long descartes_classical(const mpz_t *, mpz_t *,

static long descartes_truncate(mpz_t *, const unsigned long,
const unsigned long,
long, long *, usolve_flags *);
usolve_flags *);

/* one assumes upol[0] != 0 */
/* stopped as soon as more than 3 sgn variations are found */
Expand Down Expand Up @@ -58,7 +58,7 @@ static long mpz_poly_sgn_variations_coeffs(mpz_t* upol, unsigned long deg){

static unsigned long int descartes(mpz_t *upol1, mpz_t *upol2,
const unsigned long deg,
long sigh, long *flag, usolve_flags *flags){
usolve_flags *flags){
unsigned long int i;
#pragma omp parallel for num_threads(flags->nthreads)
for(i = 0; i <= deg; i++){
Expand All @@ -67,7 +67,7 @@ static unsigned long int descartes(mpz_t *upol1, mpz_t *upol2,

/* Max bit size of coefficients in upol1 */
const unsigned long nbits = mpz_poly_max_bsize_coeffs(upol1, deg);
long nb = descartes_truncate(upol2, deg, nbits, sigh, flag, flags);
long nb = descartes_truncate(upol2, deg, nbits, flags);

if(nb >= 0){
return nb;
Expand All @@ -88,8 +88,8 @@ static unsigned long int descartes(mpz_t *upol1, mpz_t *upol2,
/* assumes upol1 and upol2 are the same polynomials */
static long descartes_truncate(mpz_t *upol2,
const unsigned long deg,
const unsigned long nbits, long sigh,
long *flag, usolve_flags *flags){
const unsigned long nbits,
usolve_flags *flags){
int i;
/* /\* Max bit size of coefficients in upol1 *\/ */
/* const unsigned long int nbits = mpz_poly_max_bsize_coeffs(upol1, deg); */
Expand Down Expand Up @@ -142,19 +142,19 @@ static unsigned long descartes_classical(const mpz_t *upol, mpz_t *tpol,
return nb;
}

for (long i = 0; i <= deg; i++) {
for (unsigned long i = 0; i <= deg; i++) {
mpz_set(tpol[i], upol[i]);
}

for (long i = 0; i <= deg - 1; i++){
for (unsigned long i = 0; i < deg; i++){
mpz_add(tpol[i+1], tpol[i+1], tpol[i]);
}

int s = mpz_sgn(tpol[deg]);

*bsgn = s && (s == mpz_sgn(upol[0])) && (s == -hsgn);

for (long i = 1; i <= deg - 1; i++){
for (unsigned long i = 1; i < deg; i++){
j = deg - i;
t = s;
while (t == 0){
Expand All @@ -166,8 +166,8 @@ static unsigned long descartes_classical(const mpz_t *upol, mpz_t *tpol,
if (j < 0){
return nb;
}
for (j = 0; j <= deg - i - 1; j++){
mpz_add(tpol[j+1], tpol[j+1], tpol[j]);
for (unsigned long jj = 0; jj < deg - i; jj++){
mpz_add(tpol[jj+1], tpol[jj+1], tpol[jj]);
}
if (s == 0){
s = mpz_sgn(tpol[deg-i]);
Expand Down
10 changes: 5 additions & 5 deletions src/usolve/evaluate.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ static inline void basic_mpz_poly_eval_at_point(mpz_t *up, unsigned long int deg
}


static inline int sgn_mpz_poly_eval_at_point_naive(mpz_t *upoly, unsigned long int deg, mpz_t *c, int classical_algo){
static inline int sgn_mpz_poly_eval_at_point_naive(mpz_t *upoly, unsigned long int deg, mpz_t *c){
mpz_t val;
mpz_init(val);
basic_mpz_poly_eval_at_point(upoly, deg, c, &val);
Expand Down Expand Up @@ -257,7 +257,7 @@ int mpz_poly_eval_interval(mpz_t *up, const long int deg, const long k,

returns (mpz_sgn(val_do) != mpz_sgn(val_up))
*/
int mpz_scalar_product_interval(mpz_t *up, const long int deg, const long k,
int mpz_scalar_product_interval(mpz_t *up, const long int deg,
mpz_t *xdo, mpz_t *xup,
mpz_t tmp,
mpz_t val_do, mpz_t val_up,
Expand Down Expand Up @@ -306,7 +306,7 @@ int mpz_scalar_product_interval(mpz_t *up, const long int deg, const long k,
/* up( [ xdo[1], xup[1] ] ) */
/* xup[i] and xdo[i] are given mod 2^corr when i%b == 0 */

int lazy_mpz_poly_eval_interval(mpz_t *up, const unsigned long int deg,
int lazy_mpz_poly_eval_interval(mpz_t *up, const long int deg,
const long k,
mpz_t *xdo, mpz_t *xup,
const long prec, const long corr,
Expand All @@ -327,8 +327,8 @@ int lazy_mpz_poly_eval_interval(mpz_t *up, const unsigned long int deg,

mpz_set_ui(val_up, 0);
mpz_set_ui(val_do, 0);
const long t = (deg) / b;
long rd = (deg) % b;
const long t = deg / b;
long rd = deg % b;
mpz_t fdo, fup;
mpz_init(fdo);
mpz_init(fup);
Expand Down
2 changes: 1 addition & 1 deletion src/usolve/libusolve.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ void get_values_at_bounds(mpz_t *, unsigned long int, interval *, mpz_t *);
void refine_QIR_positive_root(mpz_t *, long int *, interval *,
mpz_t *, int, int);

int mpz_scalar_product_interval(mpz_t *, unsigned long int, long,
int mpz_scalar_product_interval(mpz_t *, unsigned long int,
mpz_t *, mpz_t *, mpz_t, mpz_t, mpz_t, long);

int mpz_poly_eval_interval(mpz_t *, unsigned long int, long,
Expand Down
37 changes: 18 additions & 19 deletions src/usolve/refine.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ static long long int index_linearinterp(mpz_t *vala, mpz_t *valb, mpz_t *q,
mpz_tdiv_q(*q, *vala, *valb);

long int sizeq = ilog2_mpz(*q);
if(sizeq >= 8 * sizeof(long long int)){
if((long unsigned int)sizeq >= 8 * sizeof(long long int)){
if(sizeq > logN){
fprintf(stderr,"Valeur de q = "); mpz_out_str(stderr, 10, *q);puts("");
fprintf(stderr, "Valeur de Nlog = %lld\n", logN);
Expand Down Expand Up @@ -134,7 +134,7 @@ static void getx_and_eval_mpzidx(mpz_t *upol, unsigned long int deg,
static int right_interval_2exp(mpz_t *upol, unsigned long int *deg_ptr,
interval *rt, mpz_t *x, mpz_t *b,
mpz_t *vala, mpz_t *valb, mpz_t *q,
int k, int newk){
int newk){

mpz_swap(*x, *b);
mpz_swap(*vala, *valb);
Expand All @@ -159,8 +159,7 @@ static int right_interval_2exp(mpz_t *upol, unsigned long int *deg_ptr,
static int left_interval_2exp(mpz_t *upol, unsigned long int *deg_ptr,
interval *rt, mpz_t *x, mpz_t *b,
mpz_t *vala, mpz_t *valb, mpz_t *q,
int k, int newk){

int newk) {
getx_and_eval_2expleft(upol, *deg_ptr, x, b, valb, q,
newk, 1);
mpz_swap(*x, *b);
Expand Down Expand Up @@ -363,7 +362,7 @@ static void refine_root_by_N_positive_k(mpz_t *upol, unsigned long int *deg_ptr,
return;
}
while(right_interval_2exp(upol, deg_ptr, rt, x, b,
vala, valb, q, k, newk)==0 && index <= maxindex){
vala, valb, q, newk)==0 && index <= maxindex){
if(verbose>0){
fprintf(stdout, "->");
}
Expand Down Expand Up @@ -405,7 +404,7 @@ static void refine_root_by_N_positive_k(mpz_t *upol, unsigned long int *deg_ptr,
return;
}
while(left_interval_2exp(upol, deg_ptr, rt,
x, b, vala, valb, q, k, newk) == 0){
x, b, vala, valb, q, newk) == 0){
if(verbose>0){
fprintf(stdout, "<-");
}
Expand Down Expand Up @@ -688,7 +687,7 @@ void get_values_at_bounds(mpz_t *upol, unsigned long int deg,
}

static void refine_root_naive(mpz_t *upol, unsigned long int deg,
interval *rt, mpz_t *middle, int calgo){
interval *rt, mpz_t *middle){
if(rt->isexact == 1){
return;
}
Expand All @@ -709,7 +708,7 @@ static void refine_root_naive(mpz_t *upol, unsigned long int deg,
mpz_add(*middle, *middle, rt->numer);
newk = ( (rt->k) + 1 );

sgn_middle = sgn_mpz_poly_eval_at_point_naive(upol, deg, middle, calgo);
sgn_middle = sgn_mpz_poly_eval_at_point_naive(upol, deg, middle);
}
int sign_left = rt->sign_left;

Expand All @@ -728,7 +727,7 @@ static void refine_root_naive(mpz_t *upol, unsigned long int deg,

static void remove_exact_roots_by_division(mpz_t *upol, unsigned long int *deg,
interval *roots,
unsigned long int nbroots, int nthreads){
unsigned long int nbroots) {
for(unsigned long int i = 0; i < nbroots; i++){
interval *rt = roots + i;
if(rt->isexact==1){
Expand All @@ -749,7 +748,7 @@ static void remove_exact_roots_by_division(mpz_t *upol, unsigned long int *deg,
/* divisions when there are exact roots */
void refine_QIR_roots(mpz_t *upol, unsigned long int *deg, interval *roots,
int nbneg, int nbpos,
int prec, int verbose, double step, int nthreads){
int prec, int verbose, double step){
unsigned long int i;
/* table for intermediate values */
mpz_t *tab = (mpz_t *)(malloc(sizeof(mpz_t) * 8));
Expand All @@ -760,7 +759,7 @@ void refine_QIR_roots(mpz_t *upol, unsigned long int *deg, interval *roots,
double e_time = 0, refine_time = realtime();
int nb = nbneg + nbpos;

remove_exact_roots_by_division(upol, deg, roots, nb, nthreads);
remove_exact_roots_by_division(upol, deg, roots, nb);


interval *pos_rt = (interval *)(malloc(sizeof(interval)));
Expand All @@ -774,7 +773,7 @@ void refine_QIR_roots(mpz_t *upol, unsigned long int *deg, interval *roots,
}
}

for(i = 0; i < nbneg; i++){
for(i = 0; i < (long unsigned int)nbneg; i++){

interval *rt = roots + i;

Expand Down Expand Up @@ -857,7 +856,7 @@ void refine_QIR_roots(mpz_t *upol, unsigned long int *deg, interval *roots,
}
}

for(i=nbneg; i < nb; i++){
for(i=nbneg; i < (long unsigned int)nb; i++){
interval *rt = roots + i;

if(rt->isexact==0){
Expand Down Expand Up @@ -904,7 +903,7 @@ void refine_QIR_roots(mpz_t *upol, unsigned long int *deg, interval *roots,
/* the precision of the refinement depends on the value of the root to be defined */
void refine_QIR_roots_adaptative(mpz_t *upol, unsigned long int *deg, interval *roots,
int nbneg, int nbpos,
int prec, int verbose, double step, int nthreads){
int prec, int verbose, double step){

unsigned long int i;
/* table for intermediate values */
Expand All @@ -916,7 +915,7 @@ void refine_QIR_roots_adaptative(mpz_t *upol, unsigned long int *deg, interval *
double e_time = 0, refine_time = realtime();
int nb = nbneg + nbpos;

remove_exact_roots_by_division(upol, deg, roots, nb, nthreads);
remove_exact_roots_by_division(upol, deg, roots, nb);


interval *pos_rt = (interval *)(malloc(sizeof(interval)));
Expand All @@ -930,7 +929,7 @@ void refine_QIR_roots_adaptative(mpz_t *upol, unsigned long int *deg, interval *
}
}

for(i = 0; i < nbneg; i++){
for (i = 0; i < (long unsigned int)nbneg; i++){

interval *rt = roots + i;

Expand Down Expand Up @@ -1018,7 +1017,7 @@ void refine_QIR_roots_adaptative(mpz_t *upol, unsigned long int *deg, interval *
}
}

for(i=nbneg; i < nb; i++){
for(i=nbneg; i < (long unsigned int)nb; i++){
interval *rt = roots + i;

if(rt->isexact==0){
Expand Down Expand Up @@ -1065,13 +1064,13 @@ void refine_QIR_roots_adaptative(mpz_t *upol, unsigned long int *deg, interval *

void refine_all_roots_naive(mpz_t *upol, unsigned long int deg,
interval *roots, unsigned long int nb,
unsigned int prec, int calgo, int debug){
unsigned int prec){
mpz_t *middle=malloc(sizeof(mpz_t));
mpz_init(middle[0]);

for(unsigned long int j = 0; j < nb; j++){
while((roots+j)->k < prec && (roots+j)->isexact == 0){
refine_root_naive(upol, deg, roots+j, middle, calgo);
refine_root_naive(upol, deg, roots+j, middle);
}
}
mpz_clear(middle[0]);
Expand Down
18 changes: 9 additions & 9 deletions src/usolve/taylor_shift.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ static void mpz_poly_add(mpz_t *res,
/*naive taylor shift by 1 (in place)*/
static void taylorshift1_naive(mpz_t *upol, const unsigned long int deg){
long int i,j;
for (i = 0; i <= deg-1; i++){
for (i = 0; (unsigned long int)i < deg; i++){
for (j = deg-1 ; j >= i; j--){
mpz_add(upol[j], upol[j], upol[j+1]);
}
Expand Down Expand Up @@ -191,9 +191,9 @@ static void taylorshift1_dac(mpz_t *upol,
}

nblocks = nblocks / 2;
for(int count = 1; count <= nblocks ; count++){
for (unsigned int count = 1; count <= nblocks ; count++){
unsigned long int newdeg;
if(count == nblocks){
if (count == nblocks){
newdeg = fdeg;
}
else{
Expand Down Expand Up @@ -281,10 +281,10 @@ static long mpz_poly_sgn_variations_coeffs_bsize_with_index(mpz_t* upol,
int c = mpz_cmp_ui(upol[i],0);
long int l = ilog2_mpz(upol[i]);
N = min((bsize - i +1)*L + 1, min(deg, (i+1)*L + 1));
if(l <= N || c==0){
if(l <= (long int)N || c==0){
boo = 0;
}
if( mpz_sgn(upol[i]) * s < 0 && l > N && c!=0){
if( mpz_sgn(upol[i]) * s < 0 && l > (long int)N && c!=0){
nb = nb + 1;
s = mpz_sgn(upol[i]);
if(nb >= 3){
Expand All @@ -297,10 +297,10 @@ static long mpz_poly_sgn_variations_coeffs_bsize_with_index(mpz_t* upol,
N = L + 1;
int c = mpz_cmp_ui(upol[0],0);
long int l = ilog2_mpz(upol[0]);
if(l <= N || c==0){
if(l <= (long int)N || c==0){
boo = 0;
}
if(s*mpz_sgn(upol[0]) < 0 && l> N && c!=0){
if(s*mpz_sgn(upol[0]) < 0 && l> (long int)N && c!=0){
nb = nb + 1;
}
if(nb>=3 || boo == 1){
Expand Down Expand Up @@ -359,7 +359,7 @@ static long taylorshift1_dac_wsgnvar(mpz_t *pol,
unsigned long int npwr = LOG2(nblocks);
mpz_t *current_shifted_powerX = NULL;

for(i=0;i<npwr-1; i++){
for(i=0; (unsigned int)i < npwr-1; i++){
current_shifted_powerX = shift_pwx[i];

if(nblocks>1){
Expand All @@ -375,7 +375,7 @@ static long taylorshift1_dac_wsgnvar(mpz_t *pol,

unsigned long int ndeg;

if(count==nblocks){
if(count == (long int)nblocks){
ndeg = fdeg;
}
else{
Expand Down
Loading
Loading