[Bug 217149] seq(1) inconsistently omits 'last' when using float increment

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Sun Feb 25 19:08:21 UTC 2018


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=217149

--- Comment #12 from fernando.apesteguia at gmail.com ---
(In reply to Conrad Meyer from comment #11)

OK, this is the new approach:

Index: seq.c
===================================================================
--- seq.c       (revisión: 329385)
+++ seq.c       (copia de trabajo)
@@ -80,7 +80,10 @@
        int equalize = 0;
        double first = 1.0;
        double last = 0.0;
+       double last_shown_value = 0.0;
+       double cur;
        double incr = 0.0;
+       double step;
        struct lconv *locale;
        char *fmt = NULL;
        const char *sep = "\n";
@@ -163,23 +166,19 @@
                if (!valid_format(fmt))
                        errx(1, "invalid format string");
                /*
-                * XXX to be bug for bug compatible with Plan 9 add a
+                * XXX to be bug for bug compatible with Plan 9 add a
                 * newline if none found at the end of the format string.
                 */
        } else
                fmt = generate_format(first, incr, last, equalize, pad);

-       if (incr > 0) {
-               for (; first <= last; first += incr) {
-                       printf(fmt, first);
-                       fputs(sep, stdout);
-               }
-       } else {
-               for (; first >= last; first += incr) {
-                       printf(fmt, first);
-                       fputs(sep, stdout);
-               }
+       for (step = 1, cur = first; incr > 0 ? cur <= last + (incr / 2) : cur
>= last - (incr / 2);
+           cur = first + incr * step++) {
+               printf(fmt, cur);
+               fputs(sep, stdout);
+               last_shown_value = cur;
        }
+
        if (term != NULL)
                fputs(term, stdout);


The problem with this one is that in some cases, we are not stopping when we
should. For example:

$ seq 1.7 .7 10
1.7
2.4
3.1
3.8
4.5
5.2
5.9
6.6
7.3
8
8.7
9.4 <--- Should have stopped here
10.1 

$ seq 1.07 .07 10
...
...
9.96 <--- Should have stopped here
10.03

I attached a new test file "output_incr_over_two.txt"

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list