ParanoidNumber::ParanoidNumber(const string & str) : m_value(0), m_next()
{
#ifdef PARANOID_SIZE_LIMIT
- m_size = 0;
+ m_size = 1;
#endif
#ifdef PARANOID_CACHE_RESULTS
m_cached_result = NAN;
m_cached_result = NAN;
#endif
#ifdef PARANOID_SIZE_LIMIT
- if (m_size >= PARANOID_SIZE_LIMIT)
+ if (m_size + b->m_size >= PARANOID_SIZE_LIMIT)
{
this->operator=(this->Digit());
if (op == ADD)
m_value += b->Digit();
else
m_value -= b->Digit();
- m_size = 0;
- Debug("Cut off %p", this);
+ m_size = 1;
+ //Debug("Cut off %p", this);
return b;
}
//Debug("At size limit %d", m_size);
//merge->m_next[*merge_op].push_back(b);
m_next[op].push_back(b);
#ifdef PARANOID_SIZE_LIMIT
- m_size += 1+b->m_size;
+ m_size += b->m_size;
#endif
}
else
m_cached_result = NAN;
#endif
#ifdef PARANOID_SIZE_LIMIT
- if (m_size >= PARANOID_SIZE_LIMIT)
+ if (m_size + b->m_size >= PARANOID_SIZE_LIMIT)
{
this->operator=(this->Digit());
if (op == MULTIPLY)
m_value *= b->Digit();
else
m_value /= b->Digit();
- m_size = 0;
+ m_size = 1;
- Debug("Cut off %p", this);
+ //Debug("Cut off %p", this);
return b;
}
delete(sub->OperationFactor(new ParanoidNumber(*cpy_b), op));
#ifdef PARANOID_SIZE_LIMIT
- m_size += 1+b->m_size;
+ m_size += b->m_size;
#endif
}
//assert(SanityCheck());
if (result != NULL)
{
#ifdef PARANOID_SIZE_LIMIT
- m_size -= (1+result->m_size);
+ m_size -= result->m_size;
#endif
*m = NULL;
delete(result);
#ifdef PARANOID_SIZE_LIMIT
if (Operation(n, op) == n)
{
- m_size -= (1+n->m_size);
+ m_size -= n->m_size;
delete n;
}
#else