Fix xn vs x in div

This commit is contained in:
mratsim 2018-03-30 01:08:13 +02:00
parent 0417b30e56
commit 03cb394b5d
1 changed files with 2 additions and 3 deletions

View File

@ -182,7 +182,7 @@ proc div2n1n[T: BaseUint](x_hi, x_lo, y: T): tuple[quot, rem: T] {.noSideEffect,
result.quot = (q1 shl halfSize) or q2
result.rem = ((xn_rest shl halfSize) + xnlolo - q2 * yn) shr clz
proc divmod*(x, y: MpUintImpl): tuple[quot, rem: MpUintImpl] {.noSideEffect.}=
proc divmod*(x, y: MpUintImpl): tuple[quot, rem: MpUintImpl] {.noInit, noSideEffect.}=
# Using divide and conquer algorithm.
if y.hi.isZero:
@ -193,7 +193,6 @@ proc divmod*(x, y: MpUintImpl): tuple[quot, rem: MpUintImpl] {.noSideEffect.}=
(result.quot.lo, result.rem.lo) = div2n1n(result.rem.hi, x.lo, y.lo)
result.rem.hi = zero(type result.rem.hi)
return
const
size = size_mpuintimpl(x)
halfSize = size div 2
@ -208,7 +207,7 @@ proc divmod*(x, y: MpUintImpl): tuple[quot, rem: MpUintImpl] {.noSideEffect.}=
# Get the quotient
block:
let (qlo, _) = div2n1n(x.hi, x.lo, yn.hi)
let (qlo, _) = div2n1n(xn.hi, xn.lo, yn.hi)
result.quot.lo = qlo
# Undo normalization