On Tue, 31 May 2016, Chris Torek wrote:

That was what I was complaining about.  div.c is for C90 (misspelled
"ANSI").

It wasn't misspelled when I wrote it.  :-)  The 1989 ANSI C

:-)

standard was formally ratified in Dec 1989, and the draft was
pretty firm by the time I wrote the code (which I am sure was also
1989, despite the 1990 copyright; we added or updated all the
copyrights at the last minute, for net-2).  ISO's quick adoption,
and hence the name C90, post-date all of that.

The weren't quick enough to be in the same year.  I usually spell the
year as 90, but this can be confusing when discussing the compiler
c89 or the compiler flag -std=c89.  Hmm, old gcc doesn't have -std=c90,
but clang does.


Correct rounding for a
positive divisor is towards minus infinity so that the remainder is
not negative.  This is modulo arithmetic and has good algebraic
properties.  C99 requires rounding minus infinity, at least for positive
divisors, under the extension "reliable integer division".

Did you state this backwards?  For integer divison I see:

Oops.  I seem to have misedited a whole clause.  "towards" is also
missing.

   When integers are divided, the result of the / operator is the
   algebraic quotient with any fractional part discarded.[105] If
   the quotient a/b is representable, the expression (a/b)*b + a%b
   shall equal a; otherwise, the behavior of both a/b and a%b is
   undefined.

which (as footnote 105 notes) is "truncation towards zero", so that
(-1)/2 is 0 and not -1.

In C90,
the rounding is implementation-defined, so it may be correct, but it
is "unreliable" since it can be anything.

In C90, div() is specified as giving "reliable" division, and that is
what the fixups implement.  This now wastes time to change nothing.

Right -- as long as the compiler must meet C99 rules, div.c
can just use the / and % operators.

ache added the ifdef.

I checked that compilers (old gcc and current clang on amd64) don't
auto-inline div().  It is very suitable for inlining without the
fixup.

Bruce
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to