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 | |
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.
-rw-r--r-- | extension/ChangeLog | 5 | ||||
-rw-r--r-- | extension/intdiv.c | 15 |
2 files changed, 18 insertions, 2 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index 83d43729..51bd7b71 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2018-02-11 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * intdiv.c (do_intdiv): Print a warning about loss of precision if + MPFR arguments are received when not compiled with MPFR support. + 2018-02-08 Andrew J. Schorr <aschorr@telemetry-investments.com> * configure.ac (pkgextensiondir): This must be set to 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; |