ref: 199af2b35a97790f9293e5f0f44a87c5405c46e7
parent: b44da63f75d929a4c7c0944fe512b310f9cf0ce8
author: aiju <devnull@localhost>
date: Sat May 5 08:03:45 EDT 2018
mpdiv: get signs right...
--- a/sys/src/libmp/port/mpdiv.c
+++ b/sys/src/libmp/port/mpdiv.c
@@ -52,10 +52,6 @@
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 @@
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);
--
⑨