commit | d8b2173ef97edecadcc171dc5fce95ee13ee9d3d | [log] [tgz] |
---|---|---|
author | Tim Peters <tim.peters@gmail.com> | Mon Aug 12 19:30:26 2002 +0000 |
committer | Tim Peters <tim.peters@gmail.com> | Mon Aug 12 19:30:26 2002 +0000 |
tree | c8ef60a075973bfecf6b8e67c6eb8ad40e8f4eae | |
parent | 3747a0f04c1dbe5abb47ce80abea39ed02c01aa2 [diff] |
k_mul(): White-box testing turned up that (ah+al)*(bh+bl) can, in rare cases, overflow the allocated result object by 1 bit. In such cases, it would have been brought back into range if we subtracted al*bl and ah*bh from it first, but I don't want to do that because it hurts cache behavior. Instead we just ignore the excess bit when it appears -- in effect, this is forcing unsigned mod BASE**(asize + bsize) arithmetic in a case where that doesn't happen all by itself.