From 81c7fc4081df7cb59b55c5fde486687afd0c87d7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?= Date: Wed, 1 Jul 2015 00:10:23 +0100 Subject: [PATCH] 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. --- m4/jm-macros.m4 | 15 +++++++++++++++ src/numfmt.c | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4 index 79f124b019..51c533a42a 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 ], + [#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 e58972bce6..35c5c5b97d 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 +#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 = "."; -- 2.47.2