On Sun, May 14, 2017 at 20:29 +0000, Carl Mascott wrote: > It looks to me like you are rounding on each iteration of the for-loop: > > + for (i = 0; rate > 9999 && i <= 3; i++) { > + rtmp = rate / 1000; > + if (rtmp < 9999) > + rtmp += (rate % 1000) / 500; > + rate = rtmp; > + } > > Am I missing something? >
rtmp is less than 9999 only on the last iteration. Perhaps you're referring to "rate / 1000" as rounding but in fact it just throws those digits away. > I'll post my patch on Tuesday. > > Yes, I understand that systat can display only 4 digits for BW. > That's 5 digits with my guard digit, which is shifted out (and not displayed) > at the end. > So, with the guard digit, 6 digits is too many. > > > -------------------------------------------- > On Sun, 5/14/17, Mike Belopuhov <m...@belopuhov.com> wrote: > > Subject: Re: pf queue definition: bandwidth resolution problem > To: "Carl Mascott" <cmasc...@yahoo.com> > Cc: tech@openbsd.org, t...@openbsd.org > Date: Sunday, May 14, 2017, 4:05 PM > > On Sun, May 14, 2017 at 19:48 +0000, Carl > Mascott wrote: > > I have a suggestion RE > your pftop.c patch. You are rounding > > > multiple times, after each scale operation. This is known > as > > rounding the intermediate results of > a calculation and degrades > > accuracy. > If you're not familiar with the issue do a Google > search > > on rounding intermediate. > > > > I round > only once, that's what I've explained in my > mail. > > > I suggest assigning the > pf rate to an unsigned long and multiplying by 10. > > This makes the LSD a guard digit. > > After all scaling, round once (if guard > digit >= 5 then add 10). > > Yes, this > may require one more scaling operation if it rounds up to 6 > digits (including guard digit). > > At the > very end divide by 10. > > Note: This is > essentially fixed point arithmetic with one decimal > digit. > > > > I modified > pftop.c v1.37 to do this earlier today. > > > It was kind of tricky. > > I need to see if > it still looks OK on Tuesday (I'm busy Monday). > > Let me know if you want a patch then. > > I won't have actually tested it, > though, so it's highly likely to have bugs. > > You might be better off writing your own > (and then perhaps comparing to mine). > > > > > RE my email client: It's Yahoo > webmail -- nothing I can do about it. > > > > pftop in > systat can only display 4 digits and 1 unit symbol > so you can't display all digits of your > bandwidth spec. > But please by all means, > send your diff and I'll take a look at it. > >