Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8e966ee

Browse files
committed
k_mul() comments: Explained why there's always enough room to subtract
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.
1 parent 9be8946 commit 8e966ee

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

Objects/longobject.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,6 +1791,13 @@ remaining, and that's obviously plenty to hold 2*shift+2 digits + 2 bits.
17911791
Else (bsize is odd and asize < bsize) ah and al each have at most shift digits,
17921792
so ah+al has at most shift digits + 1 bit, and (ah+al)*(bh+bl) has at most
17931793
2*shift+1 digits + 2 bits, and again 2*shift+2 digits is enough to hold it.
1794+
1795+
Note that the "lazy" analysis is enough to show that there's always enough
1796+
room to subtract al*bl and ah*bh. al and bl each have no more than shift
1797+
digits, so al*bl has no more than 2*shift, so there's at least one digit
1798+
to spare in the remaining allocated digits. The same is true for ah*bh when
1799+
bsize is even. When bsize is odd, ah*bh has at most 2*shift+2 digits, and
1800+
there are at least that many remaining allocated digits when bsize is odd.
17941801
*/
17951802

17961803
/* b has at least twice the digits of a, and a is big enough that Karatsuba

0 commit comments

Comments
 (0)