Skip to content

Commit 4e3bcd1

Browse files
committed
Fix real root isolation when sizeof(long)==4
1 parent ff6fb15 commit 4e3bcd1

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

src/usolve/refine.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,12 @@ static long long int index_linearinterp(mpz_t *vala, mpz_t *valb, mpz_t *q,
5555
}
5656
return -1;
5757
}
58+
#if ULONG_MAX == ULLONG_MAX
5859
long long int index = mpz_get_ui(*q);
60+
#else
61+
long long int index = 0;
62+
mpz_export(&index, NULL, 1, sizeof(index), 0, 0, *q);
63+
#endif
5964
return index;
6065
}
6166

@@ -305,8 +310,17 @@ static void refine_root_by_N_positive_k(mpz_t *upol, unsigned long int *deg_ptr,
305310
mpz_mul_2exp(rt->numer, rt->numer, Nlog);
306311

307312
if(index >= 0){
313+
#if ULONG_MAX == ULLONG_MAX
308314
getx_and_eval_2exp(upol, *deg_ptr, &(rt->numer),x, vala, q,
309315
newk, index);
316+
#else
317+
mpz_t index_tmp;
318+
mpz_init(index_tmp);
319+
mpz_import(index_tmp, 1, 1, sizeof(index), 0, 0, &index);
320+
getx_and_eval_2exp_mpzidx(upol, *deg_ptr, &(rt->numer), x, vala, q,
321+
newk, &index_tmp);
322+
mpz_clear(index_tmp);
323+
#endif
310324
}
311325
else{
312326
getx_and_eval_2exp_mpzidx(upol, *deg_ptr, &(rt->numer), x, vala, q,
@@ -446,8 +460,17 @@ static void refine_root_by_N_negative_k(mpz_t *upol, unsigned long int *deg_ptr,
446460
}
447461

448462
if(index >= 0){
463+
#if ULONG_MAX == ULLONG_MAX
449464
getx_and_eval(upol, *deg_ptr, &(rt->numer), x, vala, q,
450465
Nlog, k, index);
466+
#else
467+
mpz_t index_tmp;
468+
mpz_init(index_tmp);
469+
mpz_import(index_tmp, 1, 1, sizeof(index), 0, 0, &index);
470+
getx_and_eval_mpzidx(upol, *deg_ptr, &(rt->numer),x, vala, q,
471+
Nlog, k, &index_tmp);
472+
mpz_clear(index_tmp);
473+
#endif
451474
}
452475
else{
453476
getx_and_eval_mpzidx(upol, *deg_ptr, &(rt->numer),x, vala, q,

0 commit comments

Comments
 (0)