diff --git a/extension/intdiv.c b/extension/intdiv.c index 529ea36..bd0919c 100644 --- a/extension/intdiv.c +++ b/extension/intdiv.c @@ -126,11 +126,21 @@ do_intdiv(int nargs, awk_value_t *result, struct awk_ext_func *unused) clear_array(array); #ifdef HAVE_MPFR - if (nv.num_type == AWK_NUMBER_TYPE_DOUBLE && dv.num_type == AWK_NUMBER_TYPE_DOUBLE) { + if (nv.num_type == AWK_NUMBER_TYPE_DOUBLE && dv.num_type == AWK_NUMBER_TYPE_DOUBLE) #endif + { /* regular precision */ double num, denom, quotient, remainder; +#ifndef HAVE_MPFR + if (nv.num_type != AWK_NUMBER_TYPE_DOUBLE || dv.num_type != AWK_NUMBER_TYPE_DOUBLE) { + static int warned = 0; + if (!warned) { + warning(ext_id, _("intdiv: MPFR arguments converted to IEEE because this extension was not compiled with MPFR support; loss of precision may occur")); + warned = 1; + } + } +#endif num = double_to_int(nv.num_value); denom = double_to_int(dv.num_value); @@ -150,8 +160,9 @@ do_intdiv(int nargs, awk_value_t *result, struct awk_ext_func *unused) array_set_number(array, "quotient", 8, quotient); array_set_number(array, "remainder", 9, remainder); + } #ifdef HAVE_MPFR - } else { + else { /* extended precision */ mpz_ptr numer, denom; mpz_t numer_tmp, denom_tmp;