On Mon, 2026-04-20 at 09:56 +0300, Andy Shevchenko wrote:
> Please, keep the author of the original change in the loop.

> James, what do you think?

Well firstly I would note that the original behaviour isn't a bug.  It
works that way because of the binary case.  So if you feed in 1023 in
for STRING_UNITS_2 it will return 1023 B. If we're going to allow that
slop for binary, it didn't seem reasonable to be precious about the
over by 1 of decimal.

However, if the desire is for this only ever to print out three
significant figures (is that the desire? because I don't really get it
from the changelog) then this:

> > +       if (size >= divisor[units_base] && i + 1 <
> > ARRAY_SIZE(units_2)) {
> > +               size = 1;
> > +               remainder = 0;
> > +               i++;
> > +               j = 2;

Isn't right.  Size is base_10 here, so it should always be compared
against 1000 and, for the STRING_UNITS_2 case, the lower two digits
need to be carried over to the remainder (with roundup).  I'd also drop
the comparison against ARRAY_SIZE because  you'd still violate the 3sf
rule even if the unit is UNK.

Regards,

James


Reply via email to