#include <sstream>
#include <cstdarg>
+#include "rational.h"
+
using namespace std;
namespace IPDF
{
+
+/** Absolute value hackery **/
+template <> Arbint Tabs(const Arbint & a)
+{
+ //Debug("Called");
+ return a.Abs();
+}
+
Arbint::Arbint(int64_t i) : m_digits(1), m_sign(i < 0)
{
{
remainder = 0;
result = 0;
+ if (div.IsZero())
+ {
+ result = *this;
+ return;
+ }
+ else if (div.m_digits.size() == 1)
+ {
+ result.m_digits.resize(m_digits.size(), 0L);
+ remainder = Arbint(div_digits((digit_t*)&m_digits[0], div.m_digits[0], m_digits.size(), result.m_digits.data()));
+ result.m_sign = !(m_sign == div.m_sign);
+ return;
+ }
for (int i = 8*sizeof(digit_t)*m_digits.size(); i >= 0; --i)
{
remainder <<= 1;
result.BitSet(i);
}
}
+ result.m_sign = !(m_sign == div.m_sign);
}
Arbint & Arbint::operator+=(const Arbint & add)
{
m_sign = !m_sign;
for (unsigned i = 0; i < m_digits.size(); ++i)
- m_digits[i] = -m_digits[i];
+ m_digits[i] = (~m_digits[i]) + 1;
}
return *this;
}
if (whole >= old_size)
{
- m_digits.resize(1);
+ m_digits.resize(1,0L);
m_digits[0] = 0L;
return *this;
}