mpdiv: get signs right...

This commit is contained in:
aiju 2018-05-05 12:03:45 +00:00
parent 0930daf295
commit a7a07b2d43

View file

@ -52,10 +52,6 @@ mpdiv(mpint *dividend, mpint *divisor, mpint *quotient, mpint *remainder)
qsign = divisor->sign * dividend->sign;
rsign = dividend->sign;
if(quotient != nil)
quotient->sign = qsign;
if(remainder != nil)
remainder->sign = rsign;
// D1: shift until divisor, v, has hi bit set (needed to make trial
// divisor accurate)
@ -128,11 +124,15 @@ mpdiv(mpint *dividend, mpint *divisor, mpint *quotient, mpint *remainder)
if(qp != nil){
assert((quotient->flags & MPtimesafe) == 0);
mpnorm(quotient);
if(quotient->top != 0)
quotient->sign = qsign;
}
if(remainder != nil){
assert((remainder->flags & MPtimesafe) == 0);
mpright(u, s, remainder); // u is the remainder shifted
if(remainder->top != 0)
remainder->sign = rsign;
}
mpfree(t);