]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
k_mul() comments: Explained why there's always enough room to subtract
authorTim Peters <tim.peters@gmail.com>
Wed, 14 Aug 2002 16:36:23 +0000 (16:36 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 14 Aug 2002 16:36:23 +0000 (16:36 +0000)
ah*bh and al*bl.  This is much easier than explaining why that's true
for (ah+al)*(bh+bl), and follows directly from the simple part of the
(ah+al)*(bh+bl) explanation.

Objects/longobject.c

index 858be504ea3f0d1e17582e1ea69e108f3a893546..1c4a343cf7ca7c3b8becdbdbfe42fde2e2129c83 100644 (file)
@@ -1791,6 +1791,13 @@ remaining, and that's obviously plenty to hold 2*shift+2 digits + 2 bits.
 Else (bsize is odd and asize < bsize) ah and al each have at most shift digits,
 so ah+al has at most shift digits + 1 bit, and (ah+al)*(bh+bl) has at most
 2*shift+1 digits + 2 bits, and again 2*shift+2 digits is enough to hold it.
+
+Note that the "lazy" analysis is enough to show that there's always enough
+room to subtract al*bl and ah*bh.  al and bl each have no more than shift
+digits, so al*bl has no more than 2*shift, so there's at least one digit
+to spare in the remaining allocated digits.  The same is true for ah*bh when
+bsize is even.  When bsize is odd, ah*bh has at most 2*shift+2 digits, and
+there are at least that many remaining allocated digits when bsize is odd.
 */
 
 /* b has at least twice the digits of a, and a is big enough that Karatsuba