diff options
-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 = "."; |