bug-gawk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gawk] pretty-print rounds to "%.6g"


From: Aharon Robbins
Subject: Re: [bug-gawk] pretty-print rounds to "%.6g"
Date: Fri, 04 Sep 2015 14:39:19 +0300
User-agent: Heirloom mailx 12.5 6/20/10

Hi.

> To: "address@hidden" <address@hidden>
> From: Hermann Peifer <address@hidden>
> Date: Thu, 3 Sep 2015 18:44:57 +0200
> Subject: [bug-gawk] pretty-print rounds to "%.6g"
>
> Hi,
>
> I just came across the below rounding issue in pretty-printed code. Not 
> sure if this is a feature or rather a (small) bug.
>
> Hermann
>
> $ awk -o/dev/stdout 'BEGIN{ for(i=1420066800; i<=1451602800; i+=3600) 
> print i}'
> BEGIN {
>       for (i = 1.42007e+09; i <= 1.4516e+09; i += 3600) {
>               print i
>       }
> }

It's more a bug than a feature.  Patch attached and already pushed
to the repo.

Thanks for the report.

Arnold
--------------------------------------------
diff --git a/ChangeLog b/ChangeLog
index e685dd6..209c07f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-04         Arnold D. Robbins     <address@hidden>
+
+       * profile.c (pp_num): Use format_val to print integral values
+       as integers. Thanks to Hermann Peifer for the report.
+
 2015-08-25         Arnold D. Robbins     <address@hidden>
 
        * node.c (str2wstr): Upon finding an invalid character, if
diff --git a/profile.c b/profile.c
index 74fc4f9..5af7b92 100644
--- a/profile.c
+++ b/profile.c
@@ -1343,9 +1343,19 @@ pp_number(NODE *n)
        } else
 #endif
        {
-               count = PP_PRECISION + 10;
-               emalloc(str, char *, count, "pp_number");
-               sprintf(str, "%0.*g", PP_PRECISION, n->numbr);
+               /* Use format_val() to get integral values printed as integers 
*/
+               NODE *s;
+
+               getnode(s);
+               *s = *n;
+               s->flags &= ~STRCUR;
+
+               s = r_format_val("%.6g", 0, s);
+
+               s->stptr[s->stlen] = '\0';
+               str = s->stptr;
+
+               freenode(s);
        }
 
        return str;
diff --git a/test/ChangeLog b/test/ChangeLog
index 7b9e273..2de6750 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
+2015-09-04         Arnold D. Robbins     <address@hidden>
+
+       * profile.ok: Updated after code change.
+
 2015-08-25         Arnold D. Robbins     <address@hidden>
 
        * mbstr1.ok: Updated after code change.
diff --git a/test/profile5.ok b/test/profile5.ok
index bff767e..2bae16b 100644
--- a/test/profile5.ok
+++ b/test/profile5.ok
@@ -2872,7 +2872,7 @@
                _MACPFX84SFX["\204"] = "_macpfx84"
                _MACPFX84SFX["\224"] = "_macsfx94"
                _MACPFX84SFX[""] = "_mpusfxsubret"
-               _VLDMAXSTRING = 1e+06
+               _VLDMAXSTRING = 1000000
        }
 
        function _macpfx84(F, D, C, p1, p2, p3)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]