diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2018-02-11 15:28:09 -0500 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2018-02-11 15:28:09 -0500 |
commit | 77f8c28bf85699553947ab12f54ea742c300dd00 (patch) | |
tree | 9f91bf8cc06177fe38ad88fc3366c68005577389 /extension/intdiv.c | |
parent | c456bfb67cdfd71b869d059ce50335ef80c2c271 (diff) | |
download | egawk-77f8c28bf85699553947ab12f54ea742c300dd00.tar.gz egawk-77f8c28bf85699553947ab12f54ea742c300dd00.tar.bz2 egawk-77f8c28bf85699553947ab12f54ea742c300dd00.zip |
Add warning to intdiv extension when loss of precision may occur.
Diffstat (limited to 'extension/intdiv.c')
-rw-r--r-- | extension/intdiv.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/extension/intdiv.c b/extension/intdiv.c index 529ea361..bd0919cc 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; |