private bool RoundBits (int shift)
{
if (shift <= 0)
return false;
if (shift > _digitsLen) {
_digitsLen = 0;
_decPointPos = 1;
_val1 = _val2 = _val3 = _val4 = 0;
_positive = true;
return false;
}
shift += _offset;
_digitsLen += _offset;
while (shift > 8) {
_val1 = _val2;
_val2 = _val3;
_val3 = _val4;
_val4 = 0;
_digitsLen -= 8;
shift -= 8;
}
shift = (shift - 1) << 2;
uint v = _val1 >> shift;
uint rem16 = v & 0xf;
_val1 = (v ^ rem16) << shift;
bool res = false;
if (rem16 >= 0x5) {
_val1 |= 0x99999999 >> (28 - shift);
AddOneToDecHex ();
int newlen = DecHexLen ();
res = newlen != _digitsLen;
_decPointPos = _decPointPos + newlen - _digitsLen;
_digitsLen = newlen;
}
RemoveTrailingZeros ();
return res;
}