Avoid use of float arithmetic in bipartite_match.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Aug 2015 17:02:13 +0000 (13:02 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Aug 2015 17:02:19 +0000 (13:02 -0400)
commit4022f94c350f96fc5feff0503d3e2f2f6f9086cc
treee846ba4518357c6dff790c964bffb69fa12fdc0e
parent57823244ad087a2dc807a6e60fefce26f81bd5dc
Avoid use of float arithmetic in bipartite_match.c.

Since the distances used in this algorithm are small integers (not more
than the size of the U set, in fact), there is no good reason to use float
arithmetic for them.  Use short ints instead: they're smaller, faster, and
require no special portability assumptions.

Per testing by Greg Stark, which disclosed that the code got into an
infinite loop on VAX for lack of IEEE-style float infinities.  We don't
really care all that much whether Postgres can run on a VAX anymore,
but there seems sufficient reason to change this code anyway.

In passing, make a few other small adjustments to make the code match
usual Postgres coding style a bit better.
src/backend/lib/bipartite_match.c
src/include/lib/bipartite_match.h