diff options
author | Pádraig Brady <P@draigBrady.com> | 2015-07-01 00:10:23 +0100 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2015-07-01 12:29:59 +0100 |
commit | 81c7fc4081df7cb59b55c5fde486687afd0c87d7 (patch) | |
tree | e6b010d117714b355e60e9eb1425c2558aef6568 | |
parent | 491f54fb5a9d52b5f42f4a946094f7919da2966f (diff) | |
download | coreutils-81c7fc4081df7cb59b55c5fde486687afd0c87d7.tar.xz |
numfmt: increase precision on 32 bit FreeBSD
* m4/jm-macros.m4 (HAVE_FPSETPREC): Define if needed.
* src/numfmt.c (main): Call fpsetprec() if needed.
Fixes large-15 and large-16 test failures on 32 bit FreeBSD.
-rw-r--r-- | m4/jm-macros.m4 | 15 | ||||
-rw-r--r-- | src/numfmt.c | 9 |
2 files changed, 24 insertions, 0 deletions
diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4 index 79f124b01..51c533a42 100644 --- a/m4/jm-macros.m4 +++ b/m4/jm-macros.m4 @@ -165,6 +165,21 @@ AC_DEFUN([coreutils_MACROS], LIBS="$ac_seq_save_LIBS" ]) + + # See is fpsetprec() required to use extended double precision + # This is needed on 32 bit FreeBSD to give accurate conversion of: + # `numfmt 9223372036854775808` + AC_TRY_LINK([#include <ieeefp.h>], + [#ifdef __i386__ + fpsetprec(FP_PE); + #else + # error not required on 64 bit + #endif + ], [ac_have_fpsetprec=yes], [ac_have_fpsetprec=no]) + if test "$ac_have_fpsetprec" = "yes" ; then + AC_DEFINE([HAVE_FPSETPREC], 1, [whether fpsetprec is present and required]) + fi + AC_REQUIRE([AM_LANGINFO_CODESET]) # Accept configure options: --with-tty-group[=GROUP], --without-tty-group diff --git a/src/numfmt.c b/src/numfmt.c index e58972bce..35c5c5b97 100644 --- a/src/numfmt.c +++ b/src/numfmt.c @@ -32,6 +32,10 @@ #include "gl_linked_list.h" #include "gl_xlist.h" +#if HAVE_FPSETPREC +# include <ieeefp.h> +#endif + /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "numfmt" @@ -1574,6 +1578,11 @@ main (int argc, char **argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); +#if HAVE_FPSETPREC + /* Enabled extended precision if needed. */ + fpsetprec (FP_PE); +#endif + decimal_point = nl_langinfo (RADIXCHAR); if (decimal_point == NULL || strlen (decimal_point) == 0) decimal_point = "."; |