>       Found missing output given specific arg for reps, begin, end; need help.
> 
> >How-To-Repeat:
> 
> $ jot 259 101 360 > /tmp/a   
> $ jot 260 101 360 > /tmp/b 
> $ diff -u  /tmp/{a,b}
> --- /tmp/a      Fri Oct 20 17:49:19 2017
> +++ /tmp/b      Fri Oct 20 17:49:30 2017
> @@ -128,6 +128,7 @@
>  228
>  229
>  230
> +231
>  232
>  233
>  234

It's expected behavior.

First note that jot prints as many numbers as requested by the first
argument:

$ jot 259 101 360 | wc -l
     259
$ jot 260 101 360 | wc -l
     260

Quoting from the 'Rounding and truncation' section of the manual:

     The jot utility uses double precision floating point arithmetic
     internally.  Before printing a number, it is converted depending on the
     output format used.

     If no output format is specified or the output format is a floating point
     format (‘f’, ‘e’, ‘g’, ‘E’, or ‘G’), the value is rounded using the
     printf(3) function, taking into account the requested precision.

You didn't request a precision (number of decimal digits to display) by
giving a format string or a -p option, and you didn't specify a step
size (no fourth argument).

Therefore jot computes the step size as a floating point number by

        step = (end - begin) / (reps - 1)

(In your examples, steps is approximately 1.004 and 1, respectively.)

jot chooses the display precision as follows:

     -p precision  Print only as many digits or characters of the data as
                   indicated by the integer precision.  In the absence of -p,
                   the precision is the greater of the numbers begin and end.
                   The -p option is overridden by whatever appears in a
                   printf(3) conversion following -w.

begin (101) and end (360) both have integer precision, so so jot
displays the output by rounding to integer precision.

If you print with higher precision, you see that it's a rounding issue:

$ jot -p 3 259 101 360 | sed -n '128,132p'
228.492
229.496
230.500
231.504
232.508

Without -p 3, all numbers up to the values 228.492 and 229.496 are
rounded down, while from 230.500 onwards, the values are rounded up,
resulting in the output 228, 229, 231, 232, therefore omitting 230.

Reply via email to