|
|
|
|
|
by tzs
5071 days ago
|
|
This can be fixed by keeping track of some of the spillage. Here's a solution using this approach that works for 32-bit unsigned integers: def badd(A, C):
while C != 0:
t = A & C
A = A ^ C
C = (t << 1) & 0xFFFFFFFF
return A
def div3(ah):
qh = 0
ql = 0
al = 0
while ah != 0:
al = (al >> 2) & 0x0000FFFF
al = badd(al, (ah & 0x3) << 14)
ah = ah >> 2
qh = badd(qh, ah)
ql = badd(ql, al)
if ql & 0xFFFF0000:
qh = badd(qh, ql >> 16)
ql = ql & 0xFFFF
if ql > 0x8000:
qh = badd(qh, 1)
return qh
|
|