private static uint[] InternalAdd(uint[] x, int xl, uint[] y, int yl) {
Debug.Assert(xl >= yl);
uint[] z = new uint[xl];
int i;
ulong sum = 0;
for (i = 0; i < yl; i++) {
sum = sum + x[i] + y[i];
z[i] = (uint)sum;
sum >>= BitsPerDigit;
}
for (; i < xl && sum != 0; i++) {
sum = sum + x[i];
z[i] = (uint)sum;
sum >>= BitsPerDigit;
}
if (sum != 0) {
z = resize(z, xl + 1);
z[i] = (uint)sum;
} else {
for (; i < xl; i++) {
z[i] = x[i];
}
}
return z;
}