Rational<Arbint> now passes realops.test
[ipdf/code.git] / src / arbint.cpp
index 59e2252..ac39942 100644 (file)
@@ -114,6 +114,11 @@ void Arbint::Division(const Arbint & div, Arbint & result, Arbint & remainder) c
 {
        remainder = 0;
        result = 0;
+       if (div.IsZero())
+       {
+               result = *this;
+               return;
+       }
        for (int i = 8*sizeof(digit_t)*m_digits.size(); i >= 0; --i)
        {
                remainder <<= 1;
@@ -127,6 +132,7 @@ void Arbint::Division(const Arbint & div, Arbint & result, Arbint & remainder) c
                        result.BitSet(i);
                }
        }
+       result.m_sign = !(m_sign == div.m_sign);
 }
 
 Arbint & Arbint::operator+=(const Arbint & add)
@@ -265,7 +271,7 @@ Arbint & Arbint::operator>>=(unsigned amount)
        
        if (whole >= old_size)
        {
-               m_digits.resize(1);
+               m_digits.resize(1,0L);
                m_digits[0] = 0L;
                return *this;
        }

UCC git Repository :: git.ucc.asn.au